список соседей php для выбора

У меня есть массив и хотел бы сгенерировать поле выбора. Я знаю, что он должен использовать рекурсию, но не знаю, как это работает.
У меня есть пример кода для создания вложенного списка, но сейчас я ищу способ построить что-то вроде ниже:

<select>
<option value="1">Category1</option>
<option value="4">::SubCategory2</option>
<option value="2">::SubCategory1</option>
<option value="3">::::SubSubCategory</option>
</select>

Как я могу это сделать?

Array
(
[0] => Array
(
[id] => 1
[name] => Category1
[parent] => 0
[children] => Array
(
[0] => Array
(
[id] => 4
[name] => SubCategory2
[parent] => 1
[children] => Array
(
)

)

[1] => Array
(
[id] => 2
[name] => SubCategory1
[parent] => 1
[children] => Array
(
[0] => Array
(
[id] => 3
[name] => SubSubCategory
[parent] => 2
[children] => Array
(
)

)

)

)

)

)
)

function GenerateSet($nav, $tabs = "") {
$html = !strlen($tabs) ?
"\n".$tabs.'<ul class="categories">'."\n" :
"\n".$tabs.'<ul>'."\n";

foreach($nav as $page) {

$html .= $tabs."    ".'<li id="cat-'.$page['id'].'">';
$html .= ' <a href="#">
<span class="linker">
<span class="title">'.$page['name'].'</span>
</span>
</a>';

if(isset($page['children'][0])) {
$html .= $this->GenerateSet($page['children'], $tabs."        ");
}
$html .= '</li>'."\n";
}
$html .= $tabs.'</ul>'."\n";

return $html;
}

0

Решение

Попробуй это. Если у текущего элемента есть дочерние элементы, то увеличивают уровень и отображают его с помощью той же функции, в противном случае уменьшают уровень.

$array = array(
array(
'name' => 'Cat 1',
'children' => array(
array(
'name' => 'Subcat 1'
)
)
),
array(
'name' => 'Cat 2',
'children' => array(
array(
'name' => 'Sub2',
'children' => array(
array(
'name' => 'Sub3'
)
)
)
)
),
);

echo showTree($array);

function showTree($items, $level = 0) {
foreach ($items as $item) {
echo str_repeat(":", $level * 2) . $item['name'] . "<br />";
if (!empty($item['children'])) {
$level++;
showTree($item['children'], $level);
}
if ($level > 0) {
$level--;
}
}
}
1

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

Проверь это

<?php
$your_array = array(
'0' => array(
'id' => 1,
'name' => 'Category1',
'parent' => 0,
'children' => array
(
'0' => array
(
'id' => 4,
'name' => 'SubCategory2',
'parent' => 1,
'children' => array
(
)

),

'1' => array
(
'id' => 2,
'name' => 'SubCategory1',
'parent' => 1,
'children' => array
(
'0' => array
(
'id' => 3,
'name' => 'SubSubCategory',
'parent' => 2,
'children' => array
(
)

)

)

)

)

)
);
$select_str = '<select>';
foreach($your_array as $val)
{
$select_str .= '<option value="'.$val['id'].'" parent ="'.$val['parent'].'">'.$val['name'].'</option>';
if(is_array($val['children']))
{
$select_str .= implemt_recur($val['children']);
}
}
$select_str .= '</select>';
echo $select_str;
// implement recursion and make options here
function implemt_recur($array)
{
$sub_select_str = '';
if(!empty($array))
{
foreach($array as $arr)
{
$sub_select_str .= '<option value="'.$arr['id'].'" parent ="'.$arr['parent'].'">'.$arr['name'].'</option>';
if(is_array($arr['children']))
{
$sub_select_str .= implemt_recur($arr['children']);
}
}
}
return $sub_select_str;
}
?>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector