Home > Веб-разработка > Удалить лишние элементы из вложеных массивов PHP

Удалить лишние элементы из вложеных массивов PHP

Например у вас есть массив массивов и вам надо из каждого массива удалить лишние элементы с неизвестными ключами, а остальное оставить.
Для решения задачки можнно пройтись циклами и поудалять ненужное, но можно обойтись и парой строк.
Есть в PHP функция array_walk(), которая применяет заданную функцию к каждому элементу массива:

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

И есть функция array_intersect_key(), которая вычисляет пересечение массивов на основе их ключей:

array array_intersect_key ( array $array1 , array $array2 [, array $... ] )

Зададим начальный массив массивов:

$bigArray = [
 [
   'type' => 'tree',
   'color' => 'green',
   'owner' => 'Bob',
   'size' => 25,
 ],
 [
   'type' => 'stone',
   'color' => 'grey',
   'owner' => 'Jhon',
   'weight' => 3,
 ],
 [
   'type' => 'house',
   'color' => 'green',
   'owner' => 'Smith',
   'desc' => 'office',
 ],
];

И допустим надо надо оставить из всех массивов элементы с ключами ‘owner’ и ‘desc’. Тогда используя приведенные выше функции можем написать такой код:

array_walk($bigArray, function(&$array){ $array = array_intersect_key($array, ['owner' => '', 'desc' => '',]); });

После выполнения этого кода, массив примет вид:

Array (
    [0] => Array
        (
            [owner] => Bob
        )

    [1] => Array
        (
            [owner] => Jhon
        )

    [2] => Array
        (
            [owner] => Smith
            [desc] => office
        )
)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

?

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

TOP