@sergiospb

Как разбить одномерный ассоциативный массив и создать многомерный (php)?

Доброго времени.
Имеется одномерный массив. Ключи и значения заполняются "ручками", поэтому при необходимости возможно определение неких "маркеров".
Пусть для примера будет такой массив ( маркер здесь, если он нужен: "---" )
Array
(
    [---ЗАГОЛОВОК1] => ---ЗАГОЛОВОК1
    [1-подзаголовок1] => 1-подзаголовок1
    [1-подзаголовок2] => 1-подзаголовок2
    [1-подзаголовок3] => 1-подзаголовок3
    [---ЗАГОЛОВОК2] => ---ЗАГОЛОВОК2
    [2-подзаголовок1] => 2-подзаголовок1
    [2-подзаголовок2] => 2-подзаголовок2
    [---ЗАГОЛОВОК3] => ---ЗАГОЛОВОК3
    [3-подзаголовок1] => 3-подзаголовок1
    [3-подзаголовок2] => 3-подзаголовок2
    [3-подзаголовок3] => 3-подзаголовок3
    [3-подзаголовок4] => 3-подзаголовок4
)

Как можно этот массив привести к такому виду?
Array
(
    [---ЗАГОЛОВОК1] => Array
        (
            [1-подзаголовок1] => 1-подзаголовок1
            [1-подзаголовок2] => 1-подзаголовок2
            [1-подзаголовок3] => 1-подзаголовок3
        )

    [---ЗАГОЛОВОК2] => Array
        (
            [2-подзаголовок1] => 2-подзаголовок1
            [2-подзаголовок2] => 2-подзаголовок2
        )

    [---ЗАГОЛОВОК3] => Array
        (
            [3-подзаголовок1] => 3-подзаголовок1
            [3-подзаголовок2] => 3-подзаголовок2
            [3-подзаголовок3] => 3-подзаголовок3
            [3-подзаголовок4] => 3-подзаголовок4
        )

)
  • Вопрос задан
  • 579 просмотров
Решения вопроса 1
Как вариант
<?php
$array = Array
(
    "---ЗАГОЛОВОК1" => "---ЗАГОЛОВОК1",
    "1-подзаголовок1" => "1-подзаголовок1",
    "1-подзаголовок2" => "1-подзаголовок2",
    "1-подзаголовок3" => "1-подзаголовок3",
    "---ЗАГОЛОВОК2" => "---ЗАГОЛОВОК2",
    "2-подзаголовок1" => "2-подзаголовок1",
    "2-подзаголовок2" => "2-подзаголовок2",
    "---ЗАГОЛОВОК3" => "---ЗАГОЛОВОК3",
    "3-подзаголовок1" => "3-подзаголовок1",
    "3-подзаголовок2" => "3-подзаголовок2",
    "3-подзаголовок3" => "3-подзаголовок3",
    "3-подзаголовок4" => "3-подзаголовок4"
);

foreach ($array as $key => $value) {
	if (substr_count($key, "---") > 0) {
		$k = $key;
	}
	else {
		$new_array[$k][$value] = $value;
	}
}

var_dump($new_array);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Bodrosh
Можно в цикле пройтись по элементам текущего массива (foreach например), и проверять заголовок это или подзаголовок. Если это заголовок, то формируем массив Заголовка, элемменты которого - подзаголовки
$loop = [---ЗАГОЛОВОК1] => Array
(
[1-подзаголовок1] => 1-подзаголовок1
[1-подзаголовок2] => 1-подзаголовок2
[1-подзаголовок3] => 1-подзаголовок3
)
и затем записываем его как элемент нового массива ($new_arr[] = $loop;)
Ответ написан
@sergiospb Автор вопроса
Как вариант

О, а это работает, спасибо! А я что то не в ту степь пошел)))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы