Как разбить один массив на несколько?

338
25 марта 2017, 02:27

Есть такой массив

Array
(
    [0] => Площадь:
    [1] => 3028 м2
    [2] => Тип дома:
    [3] => Каменный
    [4] => Вид дома:
    [5] => Не указан
    [6] => Количество этажей:
    [7] => 5
    [8] => Подвал:
    [9] => На весь дом
    [10] => Гараж:
    [11] => Не указано
    [12] => Крыша:
    [13] => 1-скатная (плоская)
    [14] => Стиль:
    [15] => Современные
    [16] => Хиты продаж:
    [17] => Не указано
    [18] => Год:
    [19] => После 2015
    [20] => Цена:
    [21] => не указано
)

По логике понятно, что каждый первый элемент это название, каждый второй - это значение.

Как это массив превратить в вид:

Array
(
    Площадь => 3028 м2,
    Тип дома => Каменный
    ...
    итд
)
Answer 1

Можно выполнить один проход циклом for:

$res = [];
for ($i = 0; $i < count($list); $i+=2) {
  $res[$list[$i]] = $list[$i+1];
}

Можно предварительно разбить исходный массив на чанки размером 2:

$chunks = array_chunk($list, 2);
$res = [];
foreach ($chunks as list($k, $v)) {
  $res[$k] = $v;
}

Более экзотичные способы.

array_combine:

$keys = array_filter($list, function($i){return ~$i&1;}, ARRAY_FILTER_USE_KEY);
$values = array_filter($list, function($i){return $i&1;}, ARRAY_FILTER_USE_KEY);
$res = array_combine($keys, $values);

array_reduce:

$res = array_reduce($list, function($c, $a) {
    if (is_null($c['key'])) $c['key'] = $a;
    else {
        $c['res'][$c['key']] = $a;
        $c['key'] = null;
    }
    return $c;
}, ['key' => null, 'res' => []])['res'];

По условию, исходный массив имеет чётное количество элементов, если это не факт - желательно проверять наличие последнего чётного элемента

READ ALSO
Вынести img за пределы div (регулярка)

Вынести img за пределы div (регулярка)

Необходимо преобразовать строку следующего вида

254
Не ждать ответа smtp

Не ждать ответа smtp

Есть скрипт регистрации юзеров, и при успешной реге нужно слать письмоИспользую smtp Яндекса, но сама отправка и подключение к смтп серверу...

226
Двойной вывод элемента формы из-за ViewScript

Двойной вывод элемента формы из-за ViewScript

При выводе формы элемент $checkBox отображается дважды: до группы и в нейКак это исправить?

224
Вывод единицы в строке

Вывод единицы в строке

ЗдравствуйтеПомогите, пожалуйста, разобраться

214