php 保留二维数组中在另一个二维数组中找不到的行

ruoxqz4g  于 2023-04-04  发布在  PHP
关注(0)|答案(4)|浏览(135)

我有两个二维数组,我需要用第二个数组的行来过滤第一个数组的行。

$array1 = [
    ["module1", "path/to/file.txt", ""],
    ["module2", "path/to/file2.txt", ""],
];

$array2 = [
    ["module1", "path/to/file.txt", ""]
];

我认为执行array_diff($array1, $array2)会给予第一个数组的行在第二个数组中找不到的位置,但我得到了一个空数组。
我试着切换参数,仍然产生一个空数组,但这次没有意外。

z6psavjg

z6psavjg1#

documentation
当且仅当(string) $elem1 === (string) $elem2时,两个元素被认为相等。换句话说:当字符串表示相同时。
echo (string) array();只提供Array,因此对于array_diff,您的数组如下所示:

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

所以要为数组创建一个diff,你需要这样的东西(假设数组中的每个元素本身都是一个数组):

$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;
    }
}
  • 免责声明:这或多或少只是一个草图。
prdp8dxp

prdp8dxp2#

array_diff文档。
这个函数只检查n维数组中的一个维度。当然你可以使用array_diff($array1[0],$array2[0])检查更深的维度;

5kgi1eie

5kgi1eie3#

array_diff manual page:“这个函数只检查n维数组的一维,当然可以使用array_diff($array1[0],$array2[0])检查更深的维度;.”

9gm1akwq

9gm1akwq4#

要比较两个2d数组之间的行,请使用array_udiff()和3路比较运算符(飞船运算符)。
代码:(Demo

var_export(
    array_udiff($array1, $array2, fn($a, $b) => $a <=> $b)
);

有趣的事实:

  • 2005-11-24:array_udiff被添加到PHP(v5.1)。
  • 2015-12-03:PHP(v7)添加了飞船操作符(<=>)。
  • 2019-11-28:PHP(v7.4)新增箭头函数语法(fn() =>)。

相关问题