PHP. Приемы работы с массивами
Пример использования функции usort для сортировки вложенных массивов:
// Сортировать по значению поля position
usort($choices, function ($a, $b) {
return $a['position'] - $b['position']; // ASC
// return $b['position'] - $a['position']; // DESC
});
Сортировка вложенных массивов с сохранением ключей:
uasort($choices, function ($a, $b) {
return $a['position'] - $b['position']; // числа
return strcmp($a->name, $b->name); // строки
});
Натуральная сортировка плоского массива (* сбрасывает ключи массива):
$fruits = ['Orange1', 'orange2', 'Orange3', 'orange20'];
sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
Извлечь элемент из вложенного массива по значению:
$users = [['name' => 'user1'], ['name' => 'user2']];
$columns = array_column($users, 'name');
$i = array_search('user1', $columns);
$user = $users[$i]; // в Laravel есть функция-хелпер array_pull()
unset($users[$i]); // удаляет элемент без сброса индексов!
Удалить пустые элементы массива:
$arr = array_diff($arr, ['']);
Удалить элемент из массива по значению:
$arr = array_diff($arr, ['value for delete']);
Удаление элемента из ассоциативного массива по значению:
$result = array_filter($source_arr, function($a) {return $a >= 6;});
Сбросить ключи ассоциативного массива в нумерованные индексы:
$result = array_values($array);
Проверить массив на ассоциативность:
array_key_exists(0, $data);
Получить дублирующиеся элементы массива (используйте именно функцию array_diff_assoc):
$columns = ['Бренд', 'Частота, Гц', 'Частота, Гц'];
$uniques = array_unique($columns);
$duplicates = array_diff_assoc($columns, $uniques);
Сравнить ассоциативный массив с эталонным (получить общие пары):
$array = ['key1' => 'MM', 'key2' => false, 'other_key' => 'ddd'];
$filter = ['key1' => 'MM', 'key2' => true];
$intersect = array_intersect_assoc($array, $filter);
$is_matches = (count($intersect) === count($filter));
Объединение вложенных массивов:
$a1 = array( ['k1' => 'v1'], ['k2' => 'v2'] );
$a2 = array( ['k3' => 'v3'] );
$a1 = array_merge($a1, $a2);
Применить trim() для всех элементов массива:
$array = array_map('trim', $array);
Получить массив значений по ключу из вложенных массивов:
$fields = array_map(function($arr) {
return $arr['field'];
}, $arrays);
Отфильтровать параметры массива по заданным ключам:
$data = array_intersect_key($array, array_flip(['key1', 'key2']));
Отфильтровать ассоциативный массив по значению ключа:
$utmParams = array_filter($_GET, function($value, $param) {
if (mb_strpos($param, 'utm_') === 0) {
return true;
}
}, ARRAY_FILTER_USE_BOTH);
Сортировать массив по заданным ключам:
function sortArrayBySpecifiedKeys(array &$array, array $orderValues) {
$ordered = [];
$arrayCopy = $array;
foreach ($orderValues as $key) {
if (array_key_exists($key, $arrayCopy)) {
$ordered[$key] = $arrayCopy[$key];
unset($arrayCopy[$key]);
}
}
$array = $ordered + $arrayCopy;
}
sortArrayBySpecifiedKeys($myArray, ['firstKey', 'secondKey']);
Получить последний ключ массива (2 способа):
$lastKey = key(array_slice($columns, -1, 1, true));
$lastKey = head(array_reverse(array_flip($columns)));
Получить ключи массива по результату поиска во вложенных массивах:
$map = [
'Бюджетные' => ['Треш', 'УГ', '4S'],
'Популярные' => ['4S', '5C', '5S'],
'Дорогие' => ['5S', '6', '6S'],
];
$className = '4S';
$tags = array_map(function($tag, $classes) use ($className) {
if (in_array($className, $classes)) {
return $tag;
}
}, array_keys($mapTagOnClasses), array_values($mapTagOnClasses));
Array
(
[0] => Бюджетные
[1] => Популярные
[2] =>
)
#arrays, #compare, #diff, #duplicates, #merge, #filter, #keys, #map, #duplicates array values