Skip to content

ArrayHelper - класс для работы с массивами

Содержит некоторые часто встречающиеся инструменты для работы с массивами/

Объект в массив

public static function toArray(mixed $mObject, array $arProperties = array(), bool $bRecursive = true): array Переводит переменную типа объект $mObject в массив (По умолчанию - рекурсивно).

Также можно добавить в результирующий массив свойства объекта $arProperties

Пример использования
php
$obObject = new stdClass();
$obObject->foo = new stdClass();
$obObject->foo->foo1 = 'bar1';
$obObject->foo->foo2 = 'bar2';
$obObject->bar = new stdClass();
$obObject->bar->bar1 = 'foo1';
$obObject->bar->bar2 = 'foo2';

$arResult = \Realweb\Api\Model\Utils\ArrayHelper::toArray($obObject);

//array(2) {
//    ["foo"]=>  array(2) {
//        ["foo1"]=>    string(4) "bar1"
//        ["foo2"]=>    string(4) "bar2"
//  }
//  ["bar"]=>  array(2) {
//        ["bar1"]=>    string(4) "foo1"
//        ["bar2"]=>    string(4) "foo2"
//  }
//}

Объединение массивов

public static function merge(array $arA, array $arB): array

Рекурсивно объединяет 2 массива в один

Пример использования
php
$arArray1 = array(
    'foo' => array(
        'foo1' => 'bar1',
        'foo2' => 'bar2',
    ),
    'bar' => array(
        'bar1' => 'foo1',
        'bar2' => 'foo2',
    ),
);

$arArray2 = array(
    'foo' => array(
        'foo1' => 'bar1',
        'foo5' => 'bar5',
    ),
    'foobar' => array(
        'foobar1' => 'foobar1',
        'foobar2' => 'foobar2',
    ),
);

$arResult = \Realweb\Api\Model\Utils\ArrayHelper::merge($arArray1, $arArray2);
//array(3) {
//    ["foo"]=>  array(3) {
//        ["foo1"]=> string(4) "bar1"
//        ["foo2"]=> string(4) "bar2"
//        ["foo5"]=> string(4) "bar5"
//  }
//  ["bar"]=>  array(2) {
//        ["bar1"]=> string(4) "foo1"
//        ["bar2"]=> string(4) "foo2"
//  }
//  ["foobar"]=>  array(2) {
//        ["foobar1"]=> string(7) "foobar1"
//        ["foobar2"]=> string(7) "foobar2"
//  }
//}

Поиск по ключу

public static function getValue(array $arArray, mixed $mKey, mixed $mDefault = null): mixed

Поиск и получение значения в массиве по ключу. Позволяет искать значения на любом "уровне" массива используя разделитель "."

Пример использования
php
$arArray = array(
    'foo'=>array(
        'foo1'=>'bar1',
        'foo2'=>'bar2',
        'foo3'=>'bar3',
        ),
    'bar'=>array(
        'bar1'=>'foo1',
        'bar2'=>'foo2',
        'bar3'=>'foo3',
        ),
);
$mResult = \Realweb\Api\Model\Utils\ArrayHelper::getValue($arArray,"foo");
/**
* array(3)
*      [
*      "foo1" => string(4) "bar1"
*      "foo2" => string(4) "bar2"
*      "foo3" => string(4) "bar3"
*      ]
*/

$mResult = \Realweb\Api\Model\Utils\ArrayHelper::getValue($arArray,"foo.foo1");
//bar1

$mResult = \Realweb\Api\Model\Utils\ArrayHelper::getValue($arArray,"bar.bar2");
//foo2

Установка значения

public static function setValue(array &$arArray, $strPath, mixed $mValue): void

Установка значения массива по ключу. Можно использовать любую вложенность

Если ключа не было в массиве - он появится

Пример использования
php
$arArray = array(
    'foo'=>array(
        'foo1'=>'',
        'foo2'=>'bar2',
        'foo3'=>'bar3',
    )
);

\Realweb\Api\Model\Utils\ArrayHelper::setValue($arArray,"foo.foo1","bar1");
\Realweb\Api\Model\Utils\ArrayHelper::setValue($arArray,"foo1.foo1","bar1");

/**
array(2)
[
    "foo"  =>  array(3)
        [
            "foo1" => string(4) "bar1"
            "foo2" => string(4) "bar2"
            "foo3" => string(4) "bar3"
        ]
    "foo1" =>  array(1)
        [
            "foo1" => string(4) "bar1"
        ]
]
*/

Удаление элемента

public static function remove(array &$arArray, mixed $mKey, mixed $mDefault = null)

Удаляет элемент массива и возвращает его. Если элемент не найден в массиве - возвращает дефолтное значение (По умолчанию null)

Пример использования
php
$arArray = array(
    'foo'=>array(
        'foo1'=>'',
        'foo2'=>'bar2',
        'foo3'=>'bar3',
    )
);

\Realweb\Api\Model\Utils\ArrayHelper::setValue($arArray,"foo.foo1","bar1");
\Realweb\Api\Model\Utils\ArrayHelper::setValue($arArray,"foo1.foo1","bar1");

/**
array(2)
[
    "foo"  =>  array(3)
        [
            "foo1" => string(4) "bar1"
            "foo2" => string(4) "bar2"
            "foo3" => string(4) "bar3"
        ]
    "foo1" =>  array(1)
        [
            "foo1" => string(4) "bar1"
        ]
]
*/

Сортировка

public static function multisort(array &$arArray, mixed $mKey, int $iDirection = SORT_ASC, int $iSortFlag = SORT_REGULAR): void

Сортирует элементы массива или объекта по одному или нескольким ключам.

Пример использования
php
$arArray = array(
    'foo'=>array(
        'sort'=>1,
    ),
    'foo1'=>array(
        'sort'=>2,
    )
);
\Realweb\Api\Model\Utils\ArrayHelper::multisort($arArray, 'sort', SORT_DESC);

/**
array(2)
[
    "foo1"  =>  array(1)
        [
            "sort" => int 2
        ]
    "foo" =>  array(1)
        [
            "sort" => int 1
        ]
]
*/