我的印象是array_diff会评估两个数组中值之间的差异。但不知怎的,它不起作用......我猜这里是嵌套数组的问题。显然,array_diff_assoc不是解决方案,因为在这种情况下密钥是无关紧要的。
我甚至不想让它嵌套,只要看看里面的值(在本例中是数组)是否相同。
$file_details = array(
array(
"uuid" => "45ebdbaa-380b-483b-80a2-73d7c53088e2",
"filename" => "train_failure.mp3",
),
array("uuid" => "97baa061-4208-4aeb-8136-eb76c0932a3d",
"filename" => "train_work1.mp3"
),
array("uuid" => "ksjdfls6-eb76c0932a3d",
"filename" => "train.mp3"
),
);
$items = array(
array(
"uuid" => "45ebdbaa-380b-483b-80a2-73d7c53088e2",
"filename" => "train_failure.mp3",
),
array(
"uuid" => "1233489eb76c0932a3d",
"filename" => "train.mp3"
),
);
print_r(array_diff($file_details,$items));
这会返回一个空数组......我应该如何修复它?
我想要的输出是
array(
"uuid" => "97baa061-4208-4aeb-8136-eb76c0932a3d",
"filename" => "train_work1.mp3"
),
array(
"uuid" => "ksjdfls6-eb76c0932a3d",
"filename" => "train.mp3"
),
UPDATE - :*我知道array_diff对1-d数组不起作用,我很惊讶没有直接的php函数来对多维数组进行比较。*
答案 0 :(得分:2)
您的数组项是数组,无法作为字符串进行比较(array_diff()
会将所有值视为字符串 - 例如,它会尝试通过调用__toString()
方法来对对象进行字符串化。
您可以改为使用array_udiff():
$rgResult=array_udiff($file_details, $items, function($rgX, $rgY)
{
return $rgX['uuid']<$rgY['uuid']?-1:$rgX['uuid']!=$rgY['uuid'];
});
答案 1 :(得分:1)
array_diff()
方法应该适用于1-d数组。
答案 2 :(得分:0)
从array_diff()手册页:
注意:
此函数仅检查n维数组的一维。的 当然,您可以使用
检查更深的尺寸array_diff($ array1 [0],$ array2 [0]);