#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.
Поскольку приведенный выше код не предполагает максимального уровня, вы можете продолжать и продолжать с подкатегориями.