Класс Arr

Здесь приведены методы для работы с массивами любой размерности.

Arr::diffByKey($arr1, $arr2)

Многомерный аналог php-функции array_diff_key().

  • Возвращает многомерный массив, полученный путем удаления из массива $arr1 всех элементов, ключи которых совпадают с ключами массива $arr2. Пустые элементы удаляются.
  • $arr1 — многомерный массив.
  • $arr2 — многомерный массив.

Пример:
$arr = Arr::diffByKey($arr1, $arr2);

Обратите внимание, на то, что не имеют никакого значения сами значения элементов.

Arr::intersectByKey($arr1, $arr2)

Многомерный аналог php-функции array_intersect_key().

  • Возвращает многомерный массив, составленный из элементов массива $arr1 с ключами, которые совпадают с ключами массива $arr2.
  • $arr1 — многомерный массив.
  • $arr2 — многомерный массив.

Пример:
$arr = Arr::intersectByKey($arr1, $arr2);

Arr::orderByKey(&$arr)

Сортирует многомерный массив по ключам

Пример:
Arr::orderByKey($arr);

Arr::mergeByKey($arr1, $arr2, $arr3, ...)

Рекурсивное слияние любого числа массивов по ключам.

  • Возвращает многомерный массив

Если ключи совпадают, более поздний массив перебивает значение элемента более раннего массива. Если по ошибке в параметр метода попадает немассив, то этот параметр просто игнорируется.

Пример:
$arr = Arr::mergeByKey($arr1, $arr2);

Arr::insert($arr1, $arr2, $key1=null, $after=false)

В исходный массив $arr1 вставляется массив $arr2 выше элемента с ключом $key1.

  • Возвращает результирующий массив.
  • $arr1 — исходный массив.
  • $arr2 — вставляемый массив.
  • $key1 — ключ из исходного массива.
  • $after — вставить ниже элемента с ключом $key1.

Пример:
$arr = Arr::wedge(['a'=>'aa','b'=>'bb'], ['d'=>'dd'], 'b');
Результирующий массив $arr: ['a'=>'aa','d'=>'dd','b'=>'bb']

Если в исходном массиве ключ неизвестен, его можно найти через значение элемента массива:

$key1 = array_search('bb', $arr1);
Возвратит 'b'

Arr::remove($arr=[], $values)

Удаляет из массива все элементы со значениями, перечисленными в массиве $values. Удаляются также все пустые элементы-массивы, то есть, элементы со значением: [].

  • Возвращает массив.
  • $arr — многомерный массив.
  • $values — значение или массив значений под удаление. Учитывать тип данных. Если параметр опущен, будут удалены все элементы с пустыми значениями.

Примеры:

# Удалить все элементы с пустыми значениями. 
То же самое, что и Arr::remove($arr, [false, '', 0, '0', null])
Arr::remove($arr);

# Удалить все элементы со значением false.
Arr::remove($arr, false);

# Удалить все элементы со значением 0.
Arr::remove($arr, 0);

# Удалить все элементы со значениями 'green' и 'red'.    
Arr::remove($arr, ['green', 'red']);

Для замены значений массива используйте функцию array_replace_recursive.

Arr::walk(&$arr, $funcName, $funcParams=[])

Проходит по многомерному массиву и обрабатывает его значения, не затрагивая ключей.

  • $arr — обрабатываемый массив. Результат выводится в той же переменной.
  • $funcName — имя обрабатывающей функции. Функция возвращает новое значение элемента массива. В качестве первого параметра функции берется значение элемента массива $arr. В качестве остальных параметров используются элементы массива $funcParams.
  • $funcParams — массив из второй, третий и т.д. параметров ф-ии.

Пример:
Изменить массив $arr, оставив в каждом элементе символы со второго по четвертый.
Arr::walk($arr, 'substr', [1,3]);

Arr::formatOptions($options)

Превращает строку или массив строк в ассоциативный массив со значениями true. Другие ассоциативные элементы исходного массива не затрагиваются.

  • $options — массив или строка. Результат возвращается в той же переменной.
Примеры преобразований:
$options='exit'  преобразуется в ['exit'=>true]
$options=['exit', 'mode'=>'edit']  преобразуется в ['exit'=>true, 'mode'=>'edit']    

Этот метод обычно используется внутри функций и методов для приведения параметра-массива к единому формату. То есть, строковые элементы параметра-массива рассматриваются как булевы опции функции.

Сравнените полную и короткую форму записи опций:

$text2 = Text::stripTags($text, ['strip-quotes'=>true]);
$text2 = Text::stripTags($text, 'strip-quotes');

Arr::addByKeys($arr, $keys, $value)

Добавляет в массив элемент, заданный по цепочке ключей (в виде неассоциативного массива).

  • Возвращает массив.
  • $arr — исходный массив.
  • $keys — ключ или последовательность ключей в виде массива, где начальный элемент соответствует самому старшему ключу исходного массива и т.д.
  • $value — вставляемое значение элемента массива (любое данное, в том числе, массив)

Пример:

$arr = []; // начальный массив
print_r(Arr::addByKeys($arr, ['a', 1], 'zz'));
//возвратит массив: ['a' => [1 => 'zz']]

Arr::getByKeys($arr, $keys)

Возращает значение элемента массива. Этот элемент задается по цепочке ключей (в виде неассоциативного массива). Цепочка ключей может иметь произвольную глубину.

  • Возвращает элемент массива.
  • $arr — исходный массив.
  • $keys — ключ или последовательность ключей в виде массива, где начальный элемент соответствует самому старшему ключу исходного массива и т.д.

Пример:

$arr['a']['b'][1][2] = 'zz'; // тестовый массив
print_r(Arr::getByKeys($arr['a'], ['b', 1]));
//возвратит массив: [[2]=>zz]

Arr::removeByKeys($arr, $keys)

Удаляет из массива элемент, заданный цепочкой ключей (в виде неассоциативного массива).

  • Возвращает массив.
  • $arr — исходный массив.
  • $keys — ключ или последовательность ключей в виде массива, где начальный элемент соответствует самому старшему ключу исходного массива и т.д.

Arr::getUnbrokenSize($arr)

  • Возвращает число первых непустых элементов массива.
  • $arr — неассоциативный массив.

Для пустого массива возвращает 0.
Если после пустого элемента (null, '') идет непустой элемент, то возвращается false.
Используется для обработки результата действия функции func_get_args().