Php array_diff()返回空数组
我有以下两个阵列:Php array_diff()返回空数组,php,arrays,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"
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
相应地被转储到这里的第一个和第二个数组
为什么会这样
代码是:
$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));
此函数仅检查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;
您可以使用此
$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;
$result=check_diff_multi($arr1,$arr2);
打印“”;
打印(结果);
打印“”;
函数检查\u diff\u multi($array1,$array2){
$result=array();
foreach($array1作为$key=>$val){
如果(isset($array2[$key])){
if(is_数组($val)&&$array2[$key]){
$result[$key]=检查差异(val,$array2[$key]);
}
}否则{
$result[$key]=$val;
}
}
返回$result;
}
array_diff
-函数只检查n维数组的一维。您的预期输出是什么?预期输出是$arrOutput=array(数组('foo'=>'Test','bar'=>'Test')代码>,因为它不在第二个数组中,因为您试图在一维数组上使用数组_diff()
。如果要查看多维数组的回答问题,需要使用上面的链接