1

我的印象是 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 函数可以对多维数组进行比较。*

4

3 回答 3

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'];
});
于 2013-10-01T14:21:37.820 回答
1

array_diff()方法应该适用于一维数组。

于 2013-10-01T14:22:21.567 回答
0

从 array_diff() 手册页:

笔记:

此函数仅检查 n 维数组的一维。当然,您可以使用以下方法检查更深的尺寸

array_diff($array1[0], $array2[0]);

于 2013-10-01T14:22:47.380 回答