我搜索并搜索了这个问题,这个问题不在其中,如果有人可以,请帮助我。
我有两个具有以下格式的大型多维数组
$arr1 = array( array (n1,n2,..,n=5), array (n1,n2,..,n=5), n-arrays (n1,...,n5) )
注意:arr1的子数组各有5个数字。
$arr2 = array( array (n1,n2,..,n=4), array (n1,n2,..,n=4), n-arrays (n1,...,n4) )
注意:arr2的子数组各有4个数字。
现在,我需要从arr1
中删除包含arr2
中子阵列的子阵列。请看下面的例子:
使用这两个数组:
$arr1 = array(array(1,2,6,8,10), array(2,4,6,8,10), array(20,40,60,80,100));
$arr2 = array(array(1,6,8,10), array(200,400,600,800));
代码必须返回:
$ret = array(array(2,4,6,8,10), array(20,40,60,80,100));
因为(1,6,8,10)
的数量位于(1,2,6,8,10)
这是我现在正在使用的代码,它可以工作,但是对于有限数量的数据......我认为我需要更高效的代码
foreach ($arr1 as $key => $a ) {
foreach ($arr2 as $a2) {
if ( count(array_diff($a, $a2)) == 1 ) {
unset($arr1[$key]); break; }
}
}
}
答案 0 :(得分:0)
您可以使用empty()
检查array_diff()
foreach ($arr1 as $key => $v1) {
foreach ($arr2 as $v2) {
if (empty(array_diff($v2, $v1))) {
unset($arr1[$key]);
break;
}
}
}
print($arr1);
或者,如果您坚持使用count()
,则可以将其更改为
if ( count(array_diff($a2, $a) < 1)) { // array_diff has the $a2 first
unset($arr1[$key]); break;
}