Вывод одномерного массива в html-списки категорий и подкатегорий

У меня есть проблема, и я не могу найти способ ее решить. Это мой массив PHP, и я хочу вывести его в формате HTML, сгруппированном по Континент-> Страна-> Регион-> Город.

Вот массив:

(
[0] => Array
(
[0] => Europe
[1] => Spain
[2] => Galicia
[3] => Santiago de Compostela
)

[1] => Array
(
[0] => Europe
[1] => Spain
[2] => Galicia
[3] => Ferrol
)

[2] => Array
(
[0] => Europe
[1] => Spain
[2] => Galicia
[3] => Lugo
)

[3] => Array
(
[0] => Europe
[1] => Spain
[2] => Andalucía
[3] => Seville
)

[4] => Array
(
[0] => South America
[1] => Brazil
[2] => North Region
[3] => Manaus
)

[5] => Array
(
[0] => South America
[1] => Brazil
[2] => Northeast Region
[3] => Salvador
)

[6] => Array
(
.....

Я хотел бы вывести этот массив в моем HTML в формате:

<ul> Europe
<li> Spain
<ul> Galicia
<li> Santiago de Compostela </li>
<li> Ferrol </li>
<li> Lugo </li>
</ul>
<ul> Andalucía
<li> Seville </li>
<li> ... </li>
</ul>
</li>
<li> ... </li>

<ul> South America
<li> Brazil
<ul> North Region
<li> Manaus </li<
<li> ... </li>
</ul>
</li>
<li> Bolivia </li>
<ul> ... <li> ... </li> </ul>
</ul>

<ul> ... </ul>
...

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

0

Решение

Сначала я бы преобразовал массив во что-то более проходимое, это даст вам лучшую структуру «Континент => все страны на континенте => все регионы в стране => все города в регионе».

$newArr = [];
foreach ($yourArray as $firstLevel => $secondLevel) {
$newArr[$secondLevel[0]][$secondLevel[1]][$secondLevel[2]][] = $secondLevel[3];
}

Затем вы можете легко пройти через него, используя, например, рекурсию:

function printCategories($categories) {
echo "<ul>";
foreach ($categories as $categoryName => $category) {
echo "<li>";
echo is_string($categoryName) ? $categoryName : "";
if (is_array($category)) {
printCategories($category);
} else {
echo $category;
}
echo "</li>";
}
echo "</ul>";
}

printCategories($newArr);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]