Использование array_filter для фильтрации многомерных массивов: пошаговое руководство

243b5743 7614 49df acda 503c1f46eff3 HTML

в PHP обладает гораздо большими возможностями, чем просто удarray_filterФункция false. Благодаря второму параметру, который может принимать callback-функции, вы можете использовать эту функцию для выполнения практически любой задачи с массивом.

Рассмотрим, как можно отфильтровать многомерный массив по ключам и значениям.

Исходный Массив

Для демонстрации используем следующий многомерный массив, содержащий данные о разработчиках:

$array["PHPDevelopers"] = [
["Name" => 'Dan Englishby', 'Age' => '99', 'DeveloperLevel' => '3', 'Email' => 'dan@englishby.com', 'Gender' => 'Male'],
["Name" => 'Del Smith', 'Age' => '33', 'DeveloperLevel' => '8', 'Email' => 'del@smith.com', 'Gender' => 'Male'],
["Name" => 'Jame Raphael', 'Age' => '27', 'DeveloperLevel' => '4', 'Email' => 'jame@raphael.com', 'Gender' => 'Male'],
["Name" => 'Jayna Honaker', 'Age' => '42', 'DeveloperLevel' => '9', 'Email' => 'jame@raphael.com', 'Gender' => 'Female'],
["Name" => 'Stephine Ransome', 'Age' => '42', 'DeveloperLevel' => '4', 'Email' => 'stephine@ransome.com', 'Gender' => 'Female'],
];
$array["C#Developers"] = [
["Name" => 'Craig Woolard', 'Age' => '22', 'DeveloperLevel' => '4', 'Email' => 'craig@woolard.com', 'Gender' => 'Male'],
["Name" => 'Tiffiny Minich', 'Age' => '21', 'DeveloperLevel' => '3', 'Email' => 'tiffiny@minich.com', 'Gender' => 'Female'],
["Name" => 'Chad Lanser', 'Age' => '55', 'DeveloperLevel' => '7', 'Email' => 'chad@lanser.com', 'Gender' => 'Male'],
["Name" => 'Latisha Langlais', 'Age' => '25', 'DeveloperLevel' => '2', 'Email' => 'latisha@langlais.com', 'Gender' => 'Female'],
["Name" => 'Dave Gaona', 'Age' => '63', 'DeveloperLevel' => '9', 'Email' => 'dave@gaona.com', 'Gender' => 'Male'],
];

Для удобства представления данных можно использовать функцию var_dump.

Фильтрация Многомерного Массива по Ключу

Предположим, что вам нужны только данные для PHPDevelopers. В этом случае мы можем использовать array_filter с ARRAY_FILTER_USE_KEY, чтобы фильтровать по ключам.

$phpDevs = array_filter($array, function ($key) {
return $key == 'PHPDevelopers';
}, ARRAY_FILTER_USE_KEY);

Результат:

array (
'PHPDevelopers' =>
array (
0 =>
array (
'Name' => 'Dan Englishby',
'Age' => '99',
'DeveloperLevel' => '3',
'Email' => 'dan@englishby.com',
'Gender' => 'Male',
),
1 =>
array (
'Name' => 'Del Smith',
'Age' => '33',
'DeveloperLevel' => '8',
'Email' => 'del@smith.com',
'Gender' => 'Male',
),
2 =>
array (
'Name' => 'Jame Raphael',
'Age' => '27',
'DeveloperLevel' => '4',
'Email' => 'jame@raphael.com',
'Gender' => 'Male',
),
3 =>
array (
'Name' => 'Jayna Honaker',
'Age' => '42',
'DeveloperLevel' => '9',
'Email' => 'jame@raphael.com',
'Gender' => 'Female',
),
4 =>
array (
'Name' => 'Stephine Ransome',
'Age' => '42',
'DeveloperLevel' => '4',
'Email' => 'stephine@ransome.com',
'Gender' => 'Female',
),
),
);

Если третий параметр не указан, array_filter не будет фильтровать по ключам, возвращая пустой массив:

$phpDevs = array_filter($array, function ($key) {
return $key == 'PHPDevelopers';
});

Результат:

array (
);

Фильтрация Многомерного Массива по Значению

Теперь попробуем отфильтровать PHP-разработчиков старше сорока лет.

$age = 40;

$phpDevsOver40 = array_filter($array["PHPDevelopers"], function ($value) use ($age) {
return ($value["Age"] > $age);
});

Результат:

array (
0 =>
array (
'Name' => 'Dan Englishby',
'Age' => '99',
'DeveloperLevel' => '3',
'Email' => 'dan@englishby.com',
'Gender' => 'Male',
),
3 =>
array (
'Name' => 'Jayna Honaker',
'Age' => '42',
'DeveloperLevel' => '9',
'Email' => 'jame@raphael.com',
'Gender' => 'Female',
),
4 =>
array (
'Name' => 'Stephine Ransome',
'Age' => '42',
'DeveloperLevel' => '4',
'Email' => 'stephine@ransome.com',
'Gender' => 'Female',
),
);

Заключение

Функция array_filter предоставляет мощные возможности для работы с массивами, позволяя эффективно отбирать нужные данные. Это может быть полезно, например, для фильтрации товаров в интернет-магазине или отбора записей в базе данных.

Для полного понимания возможностей array_filter рекомендуем ознакомиться с официальной документацией.

Оцените статью