@issssrt

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

Есть такой массив
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,
	Тип дома => Каменный
	...
	итд

)
  • Вопрос задан
  • 176 просмотров
Решения вопроса 2
thewind
@thewind
php программист, front / backend developer
$new_array = [];
foreach ($array as $k => $v) {
    if ( !($k%2) && isset($array[$k+1]) )
        $new_array[$v] = $array[$k+1];
}
Ответ написан
Комментировать
gromdron
@gromdron
Работаю с Bitrix24
Спасибо за интересную задачу.
Вот код:
/* @var array Массив ключей для объединения*/
$arKeys   = [];
/* @var array Массив значений для объединения*/
$arValues = [];

/* @var array Исходный массив */
$arOldArray = [
    'Площадь:',
    '3028 м2',
    'Тип дома:',
    'Каменный',
    'Вид дома:',
    'Не указан',
    'Количество этажей:',
    '5',
    'Подвал:',
    'На весь дом',
    'Гараж:',
    'Не указано',
    'Крыша:',
    '1-скатная (плоская)',
    'Стиль:',
    'Современные',
    'Хиты продаж:',
    'Не указано',
    'Год:',
    'После 2015',
    'Цена:',
    'не указано',
];

foreach( $arOldArray as $k => $v )
{
    if ( ++$k % 2 )
    {
        $arKeys[] = trim(str_replace(':','',$v));
    }
    else
    {
        $arValues[] = trim($v);
    }
}

var_dump(array_combine($arKeys, $arValues));


Результат:
array(11) {
  ["Площадь"]=>
  string(8) "3028 м2"
  ["Тип дома"]=>
  string(16) "Каменный"
  ["Вид дома"]=>
  string(17) "Не указан"
  ["Количество этажей"]=>
  string(1) "5"
  ["Подвал"]=>
  string(20) "На весь дом"
  ["Гараж"]=>
  string(19) "Не указано"
  ["Крыша"]=>
  string(33) "1-скатная (плоская)"
  ["Стиль"]=>
  string(22) "Современные"
  ["Хиты продаж"]=>
  string(19) "Не указано"
  ["Год"]=>
  string(15) "После 2015"
  ["Цена"]=>
  string(19) "не указано"
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Нету смысла обходить весь массив

function pairsToValues(array $input)
{
    for ($i = 0, $l = count($input); $i < $l; ++$i) {
        $output[$input[$i]] = $input[++$i];
    }
    return $output;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы