PHP - array_diff将Array赋予字符串转换错误

时间:2018-06-10 13:26:33

标签: php array-difference

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

$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中删除Home条目......

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

它没有工作,并给我数组字符串转换错误,我哪里错了?

2 个答案:

答案 0 :(得分:1)

您可以使用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>";

这将返回:

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

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

)

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

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

这将导致:

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

答案 1 :(得分:1)

使用一些数组体操,你可以将breadcrumbs数组转换为关联数组,由第一项键入,然后使用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);