如何在PHP中比较LARGE多维数组

时间:2017-12-17 04:37:29

标签: php arrays multidimensional-array

我搜索并搜索了这个问题,这个问题不在其中,如果有人可以,请帮助我。

我有两个具有以下格式的大型多维数组

$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; }        
      }     
   } 
}

1 个答案:

答案 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;
}