PHP. Приемы работы с массивами

Категория: 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

категория: PHP