array_diff()返回空数组

时间:2015-09-23 09:42:17

标签: php arrays

我有以下两个数组:

array(1) { [0]=> array(2) { ["foo"]=> string(4) "Test" ["bar"]=> string(18) "Test" } } 

array(3) { [0]=> array(2) { ["foo"]=> string(3) "295" ["bar"]=> string(1) "9" } [1]=> array(2) { ["foo"]=> string(7) something" ["bar"]=> string(17) "something else" } [2]=> array(2) { ["foo"]=> string(5) "Test2" ["bar"]=> string(19) "Test2" } }

array_diff($arr1, $arr2);返回空数组,其中$arr1$arr2因此第一个和第二个数组var转储到这里。

为什么会这样?

代码是:

$arr1 = array(
    array('foo' => 'Test', 'bar' => 'Test')
);

$arr2 = array(
      array('foo' => '295', 'bar' => '9'),
      array('foo' => 'something', 'bar' => 'else'),
      array('foo' => 'Test2', 'bar' => 'Test2')
);

var_dump(array_diff($arr1, $arr2));

2 个答案:

答案 0 :(得分:0)

此函数仅检查n维数组的一维。

您可以尝试其他方式,例如 -

$op= [];
foreach($arr2 as $array) {
   $check = array_diff($arr1[0], $array);
   $op[]= $check;
}
$op= array_filter($op);

$op = (count($op) === count($arr2)) ? $arr1 : null;

Check it here

答案 1 :(得分:0)

您可以使用此

$result = check_diff_multi($arr1, $arr2);
print '<pre>';
print_r($result);
print '</pre>';

function check_diff_multi($array1, $array2){
    $result = array();
    foreach($array1 as $key => $val) {
         if(isset($array2[$key])){
           if(is_array($val) && $array2[$key]){
               $result[$key] = check_diff_multi($val, $array2[$key]);
           }
       } else {
           $result[$key] = $val;
       }
    }

return $result;

}