Я хочу создать этот вопрос с намерением, чтобы мы могли собрать в одном месте один или несколько примеров бесконечного дерева массивов и сгенерировать вложенную структуру HTML <ul> <li>
с примерами кодов, использующих передовой опыт для младших классов.программисты, которые хотят научиться работать с массивами этого типа.
Область применения:
- Сортировать расположение и генерировать HTML с различными типами примеров
- Используйте различные примеры кодов с одинаковым результатом, чтобы понять работу с такими типами устройств, которые могут стать очень сложными.
Я подготовил для этого примерамногоуровневое расположение:
Код, который заказывает это расположение, я получил из этого ответа: сортировка массива php
Простое представлениекод, который не так легко переварить, я хотел бы, чтобы более опытные программисты дали нам больше примеров кода для получения того же результата, с различными практиками иd примеров.
$data = array(
array("id"=> 1, "parent_id" => "", "name"=> "Home" ),
array("id"=> 2, "parent_id" => "", "name"=> "News"),
array("id"=> 3, "parent_id" => 2, "name"=> "World"),
array("id"=> 4, "parent_id" => 2, "name"=> "Internationals"),
array("id"=> 5, "parent_id" => 4, "name"=> "America"),
array("id"=> 6, "parent_id" => 5, "name"=> "United Stated"),
array("id"=> 7, "parent_id" => 6, "name"=> "Florida"),
array("id"=> 8, "parent_id" => 7, "name"=> "Miami"),
array("id"=> 9, "parent_id" => "", "name"=> "Sports"),
array("id"=> 10, "parent_id" => "", "name"=> "Global")
);
$sort = array();
$all = array();
$dangling = array();
// Initialize arrays
foreach ($data as $value) {
$value['children'] = array();
$id = $value['id'];
// If this is a top-level node, add it to the sort immediately
if ($value['parent_id'] == '') {
$all[$id] = $value;
$sort[] =& $all[$id];
// If this isn't a top-level node, we have to process it later
} else {
$dangling[$id] = $value;
}
}
// Process all 'dangling' nodes
while (count($dangling) > 0) {
foreach($dangling as $value) {
$id = $value['id'];
$pid = $value['parent_id'];
// If the parent has already been added to the sort, it's
// safe to add this node too
if (isset($all[$pid])) {
$all[$id] = $value;
$all[$pid]['children'][] =& $all[$id];
unset($dangling[$value['id']]);
}
}
}
echo "<pre>"; print_r($sort);
Это будет результат упорядоченного массива:
Array
(
[0] => Array
(
[id] => 1
[parent_id] =>
[name] => Home
[children] => Array
(
)
)
[1] => Array
(
[id] => 2
[parent_id] =>
[name] => News
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 2
[name] => World
[children] => Array
(
)
)
[1] => Array
(
[id] => 4
[parent_id] => 2
[name] => Internationals
[children] => Array
(
[0] => Array
(
[id] => 5
[parent_id] => 4
[name] => America
[children] => Array
(
[0] => Array
(
[id] => 6
[parent_id] => 5
[name] => United Stated
[children] => Array
(
[0] => Array
(
[id] => 7
[parent_id] => 6
[name] => Florida
[children] => Array
(
[0] => Array
(
[id] => 8
[parent_id] => 7
[name] => Miami
[children] => Array
(
)
)
)
)
)
)
)
)
)
)
)
)
[2] => Array
(
[id] => 9
[parent_id] =>
[name] => Sports
[children] => Array
(
)
)
[3] => Array
(
[id] => 10
[parent_id] =>
[name] => Global
[children] => Array
(
)
)
)
Я хочу создать из этого массиваHTML-структура, подобная следующей, с использованием передовых методов и с различными примерами.
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">News</a>
<ul>
<li><a href="#">World</a></li>
<li><a href="#">Internationals</a>
<ul>
<li><a href="#">America</a>
<ul>
<li><a href="#">United Stated</a>
<ul>
<li><a href="#">Florida</a>
<ul>
<li><a href="#">Miami</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Sports</a></li>
<li><a href="#">Global</a></li>
</ul>