Php 通过比较嵌套数组计算差异
我的印象是array_diff计算两个数组中的值之间的差异。但不知怎的,它不起作用…我猜嵌套数组是这里的问题。显然,array_diff_assoc不是解决方案,因为在这种情况下键是不相关的 我甚至不想让它嵌套,只是看看里面的值(在本例中是数组)是否相同Php 通过比较嵌套数组计算差异,php,arrays,Php,Arrays,我的印象是array_diff计算两个数组中的值之间的差异。但不知怎的,它不起作用…我猜嵌套数组是这里的问题。显然,array_diff_assoc不是解决方案,因为在这种情况下键是不相关的 我甚至不想让它嵌套,只是看看里面的值(在本例中是数组)是否相同 $file_details = array( array( "uuid" => "45ebdbaa-380b-483b-80a2-73d7c53088e2", "filename"
$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"
),
更新-:*我知道array_diff不适用于一维数组,我只是很惊讶没有直接的php函数来对多维数组进行比较。*您的数组项是数组,不能作为字符串进行比较(
array_diff()
将所有值都视为字符串-例如,它将尝试通过调用对象的\uu toString()
方法来字符串化对象
您可以改为使用:
$rgResult=array\u udiff($file\u details,$items,function($rgX,$rgY)
{
返回$rgX['uuid']array_diff()
方法应该与一维数组一起使用。来自array_diff()手册页:
注:
此函数仅检查n维数组的一维。的
当然,您可以使用
数组_diff($array1[0],$array2[0])
请参阅array_diff的文档。这是您的问题的答案。您也可以试试array_diff。@ghaxx-我知道array_diff不适用于一维数组,我只是很惊讶没有直接的php函数用于在多维数组上进行比较。@Patrik:我想您会在这里找到一条注释,其中包含了比较二维数组的技巧。@Patrik:g serialize.Cheers…非常惊讶php没有提供直接函数来比较嵌套数组。这是基于观点的。我认为这没关系,因为数组可以包含任何内容,并且在常见情况下,说第一个小于/大于/等于第二个并不容易
$rgResult=array_udiff($file_details, $items, function($rgX, $rgY)
{
return $rgX['uuid']<$rgY['uuid']?-1:$rgX['uuid']!=$rgY['uuid'];
});