我对
array_diff()
的行为感到困惑。
为什么我的结果数组中不存在
genre
?
你知道如何解决这个问题吗?
<?php
$array1 = array
(
'value01' => '0',
'value02' => 'v2',
'genre' => '1',
'type' => 'text',
'contry' => 'us',
'data' => '1',
);
$array2 = array
(
'value01' => 'v1',
'value02' => 'v2',
'genre' => '0',
'type' => 'text',
'contry' => 'canada',
'data' => '1',
);
print_r(array_diff($array1,$array2));
我的结果:
Array
(
[contry] => us
)
但我期望:
Array
(
[value01] => 0,
[genre] => 1,
[contry] => us,
);
array_diff_assoc
将导致数组到字符串转换异常,例如像这样的数组:
"ip" => "127.0.0.1"
"uri" => "follows/count"
"body" => array:1 [
"user_id" => 4473
]
对于这些类型,我创建了一个通用的自定义函数,您可以使用它:
function mutidimensional_arrays_are_same(array $baseArray, array $compareArray)
{
try {
foreach ($baseArray as $key => $value) {
if (is_array($value) && isset($compareArray[$key]) && is_array($compareArray[$key])) {
return mutidimensional_arrays_are_same($value, $compareArray[$key]);
} else {
if ($value != $compareArray[$key]) {
return false;
}
}
}
return true;
} catch (Exception $err) {
return !str_starts_with($err->getMessage(), 'Undefined ');
}
}
与 array_diff_assoc
不同,它会返回
boolean