我在php中设置了数组。我需要从下面的代码中删除重复/包含记录。
Array (
[0] => Array ( [percent] => 88.461538461538 [basenum] => 079 [code] => HL [group] => 0 )
[1] => Array ( [percent] => 88.461538461538 [basenum] => 097 [code] => HL [group] => 0 )
[2] => Array ( [percent] => 88.461538461538 [basenum] => 709 [code] => HL [group] => 0 )
[3] => Array ( [percent] => 88.461538461538 [basenum] => 790 [code] => HL [group] => 0 )
[4] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => HL [group] => 0 )
[5] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => TL [group] => 0 ) // This will not removed because of 'code' different in array
[6] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => HL [group] => 1 ) // This will not removed because of 'group' different in array
))
元素 1、2、3、4、5 将被删除,因为basenum
包含在元素 0 中。所以预期的结果/新数组应该是
Array (
[0] => Array ( [percent] => 88.461538461538 [basenum] => 079 [code] => HL [group] => 0 )
[1] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => TL [group] => 0 )
[2] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => HL [group] => 1 )
)
谢谢大家的回答。
由于basenum
如果值包含相同的字符集,则它们是等效的,因此此代码将执行您想要的操作。通过对每个值中的字符进行排序并比较结果数组来compare_basenum
检查两个basenum
值是否相同。在循环中,我们查看具有匹配 basenum 的所有值,并查看code
orgroup
值是否相同,如果不相同,我们将该值添加到输出中。
function compare_basenum($b1, $b2) {
$b1 = str_split($b1);
sort($b1);
$b2 = str_split($b2);
sort($b2);
return $b1 === $b2;
}
$newdata = array();
foreach ($data as $d) {
$matching_basenums = array_filter($newdata, function ($v) use ($d) { return compare_basenum($v['basenum'], $d['basenum']); });
if (!count($matching_basenums) ||
!in_array($d['code'], array_column($matching_basenums, 'code')) ||
!in_array($d['group'], array_column($matching_basenums, 'group'))) {
$newdata[] = $d;
}
}
print_r($newdata);
输出(基于以下 OP 评论的更新数据):
Array (
[0] => Array ( [percent] => 88.461538461538 [basenum] => 079 [code] => HL [group] => 8 )
[1] => Array ( [percent] => 88.461538461538 [basenum] => 709 [code] => HL [group] => 0 )
[2] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => TL [group] => 0 )
[3] => Array ( [percent] => 88.461538461538 [basenum] => 907 [code] => HL [group] => 1 )
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句