php - 为什么数组数组上的 array_diff 返回一个空数组?

标签 php

我有两个数组,var_dump 为其提供以下值:

$array1:

Artifacts:array(2) { [0]=>  array(3) { [0]=>  string(7) "module1" [1]=>  string(16) "path/to/file.txt" [2]=>  string(0) "" } [1]=>  array(3) { [0]=>  string(7) "module2" [1]=>  string(17) "path/to/file2.txt" [2]=>  string(0) "" } }

$数组2:

Artifacts:array(1) { [0]=>  array(3) { [0]=>  string(7) "module1" [1]=>  string(16) "path/to/file.txt" [2]=>  string(0) "" } }

我认为执行 array_diff($array1,$array2) 会给我一个只包含第二个元素的数组。相反,我得到了一个空数组。我尝试切换参数,仍然是一个 empty_array,但这次没有意外。 array_diff 不能用于数组的数组吗?

最佳答案

来自documentation :

Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same.

echo (string) array(); 只为您提供 Array,因此对于 array_diff,您的数组如下所示:

$array1 = array('Array', 'Array');
$array2 = array('Array');

因此,要为您的数组创建差异,您需要这样的东西(假设数组中的每个元素本身都是一个数组):

$diff = array();

foreach($array1 as $val1) {
    $contained = false;
    foreach($array2 as $val2) {
        if(count(array_diff($val1, $val2)) == 0) {
            $contained = true; 
            break;
        }
    }
    if(!$contained) {
        $diff[] = $val1;
    }
}

免责声明:这或多或少只是一个草图。

关于php - 为什么数组数组上的 array_diff 返回一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955623/

相关文章:

php - 在 mysql 响应的某些字符后添加点 (.)

php - PDO - 动态查询构建

php - 寄存器上的 Laravel 5.5 条件重定向

php - 使用 switch case 以数组作为参数的 PHP 函数更新 MySQL 数据库

php - Laravel:通过另一个表获取模型

php - 使用 LEFT JOIN pdo php mysql 更新

php - 用一个变量查询多个字段的PDO最佳实践

javascript - 什么是 cookie 和 session ,它们是如何相互关联的?

php - 如何在json中进行int和double和url

php - Laravel 使用多个 where 子句选择数据并返回任何数据透视表数据