PHP - array_diff 给出数组到字符串的转换错误

PHP - array_diff giving Array to string conversion errors

我有一个看起来像这样的数组..

$breadcrumbs = Array
(
    [0] => Array
        (
            [0] => Home
            [1] => homepage.html
        )

    [1] => Array
        (
            [0] => About
            [1] => aboutpage.html
        )

    [2] => Array
        (
            [0] => Contact
            [1] => contactpage.html
        )

)

$remove = Array
(
    [0] => Home
)

我正在尝试使用 array_diff 像这样从 $breadcrumbs 中删除主页条目...

return ( array_diff($breadcrumbs, $remove) );

它不工作并给我数组到字符串的转换错误,我哪里出错了?

可以使用array_filter来过滤数组。使用 in_array 检查由字符串组成的数组。

$breadcrumbs = array(
    array('Home','homepage.html'),
    array('About','aboutpage.html'),
    array('Contact','contactpage.html')
);

$remove = array('Home');

$result = array_filter($breadcrumbs, function($o) use ($remove) {
    return !in_array( $o[0], $remove );
});

echo "<pre>";
print_r( $result );
echo "</pre>";

这将 return:

Array
(
    [1] => Array
        (
            [0] => About
            [1] => aboutpage.html
        )

    [2] => Array
        (
            [0] => Contact
            [1] => contactpage.html
        )

)

另一种选择,如果你只需要页面名称(元素0),你可以使用array_column将多维数组转换为简单数组。

$result = array_diff( array_column($breadcrumbs, 0), $remove);

这将导致:

Array
(
    [1] => About
    [2] => Contact
)

使用一些数组技巧,您可以将面包屑数组转换为关联数组,以第一项为键,然后使用 array_diff_keys() 并翻转 $remove 数组(将值转换为键)。

$breadcrumbs = array_column($breadcrumbs, null, 0);
$breadcrumbs = array_diff_key($breadcrumbs, array_flip($remove));
print_r($breadcrumbs);

如果您希望结束数组是一个没有字符串键的基于 0 的数组,请添加

$breadcrumbs = array_values($breadcrumbs);