PHP - array_diff, дающий ошибки преобразования массива в строку - PullRequest
0 голосов
/ 10 июня 2018

У меня есть массив, который выглядит следующим образом ..

$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, чтобы удалить запись Home из $ breadcrumbs, как это ...

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

Это не работает и дает мне ошибки преобразования массива в строку, где я ошибаюсь?

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Используя небольшую гимнастику массива, вы можете преобразовать массив хлебных крошек в ассоциативный массив, используя первый элемент, затем использовать array_diff_keys() с перевернутым массивом $remove (преобразовать значения вkeys).

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

Если вы хотите, чтобы конечный массив представлял собой массив на основе 0 без строковых ключей, добавьте

$breadcrumbs = array_values($breadcrumbs);
0 голосов
/ 10 июня 2018

Вы можете использовать array_filter для фильтрации массива.Используйте in_array для проверки массива, состоящего из строки.

<code>$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 "
";

Это вернет:

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
)
...