Php 通过比较嵌套数组计算差异

Php 通过比较嵌套数组计算差异,php,arrays,Php,Arrays,我的印象是array_diff计算两个数组中的值之间的差异。但不知怎的,它不起作用…我猜嵌套数组是这里的问题。显然,array_diff_assoc不是解决方案,因为在这种情况下键是不相关的 我甚至不想让它嵌套,只是看看里面的值(在本例中是数组)是否相同 $file_details = array( array( "uuid" => "45ebdbaa-380b-483b-80a2-73d7c53088e2", "filename"

我的印象是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"
    ),

更新-:*我知道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'];
});