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

341
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 (регулярка)

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

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

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

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

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

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

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

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

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

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

216