У меня есть проблема, и я не могу найти способ ее решить. Это мой массив 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>
...
Проблема в том, что я хотел бы отображать все континенты только один раз, под континентами в каждой стране только один раз и под страной список всех городов в этом массиве. Я перепробовал много решений, но ни одно из них не помогло мне. Спасибо за ваши ответы.
Сначала я бы преобразовал массив во что-то более проходимое, это даст вам лучшую структуру «Континент => все страны на континенте => все регионы в стране => все города в регионе».
$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);
Других решений пока нет …