Многоуровневые категории-от одного массива к многомерному массиву

#php #arrays #recursion #build

Вопрос:

Я пытаюсь сосредоточиться на решении следующих задач:

У меня есть строка, в которой есть этот шаблон:

Category 1 > SubCategory 2 > SubSubCategory 3 > SubSubSubCategory 4 ... etc.

Я использую функцию разнесения по ‘>’ для преобразования строки в массив. Теперь мой окончательный результат должен быть примерно таким:

$categories[ 'Category 1' ][ 'SubCategory 2' ][ 'SubSubCategory 3' ][ 'SubSubSubCategory 4'][...etc...]

Я предполагаю, что мне следует использовать рекурсивную функцию, но я просто не могу разобраться в этом. Решение должно охватывать неограниченное количество подкатегорий.

Есть какие-нибудь идеи?

Ответ №1:

Что ж, у меня есть решение, которое, возможно, не самое эффективное, но которое может помочь вам решить то, что вам нужно, и, возможно, вам будет легче понять.

 <?php
$categories = "Category 1 > SubCategory 2 > SubSubCategory 3 > SubSubSubCategory 4";

$splited = explode(">", $categories);

$reversed = array_reverse($splited);

$result = array();

foreach($reversed as $category) {
    $result = [trim($category) => $result];
}

var_dump($result);
 

В принципе, я сделал то же самое, что и вы, я использовал an explode() для разделения каждой категории.
В следующей строке я перевернул этот массив, чтобы добавить категории с последнего на первый уровень.
В foreach с перевернутым массивом каждый цикл я добавляю предыдущий массив в качестве значения и передаю текущее имя категории в качестве ключа в ту же переменную. Это делает каждый созданный массив ассоциативным с предыдущим.

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

Ответ №2:

Во-первых, давайте сделаем explode так, чтобы также избавиться от пробелов:

 $categories = explode(" > ", "Category 1 > SubCategory 2 > SubSubCategory 3 > SubSubSubCategory 4");
 

Теперь давайте построим наши вложенные array :

 $categories = explode(" > ", "Category 1 > SubCategory 2 > SubSubCategory 3 > SubSubSubCategory 4");
$nested = "somevalue"; // The answer did not specify what the ultimate value should be.
for ($index = count($categories); $index >= 0; $index--) {
    $nested = [$nested];
}
//$nested is the array that you wanted to build.
 

Поскольку приведенный выше код не предполагает максимального уровня, вы можете продолжать и продолжать с подкатегориями.