Reputation: 10754
I have this array:
array
0 => string '3,6' (length=3)
3 => string '4,5' (length=3)
4 => string '7,8' (length=3)
8 => string '9' (length=1)
OR
array
3 =>
array
4 =>
array
7 => null
8 =>
array
9 => null
5 => null
6 => null
Every key
is the id and value
is the id for the childs of this parent.
ID of 0 means that (3 & 6) have no parent.
Now, i want to output an HTML list like:
- 3
- 4
- 7
- 8
- 9
- 5
- 6
Upvotes: 0
Views: 1976
Reputation: 44346
$arr = array(
0 => '3,6',
3 => '4,5',
4 => '7,8',
8 => '9',
);
function writeList($items){
global $arr;
echo '<ul>';
$items = explode(',', $items);
foreach($items as $item){
echo '<li>'.$item;
if(isset($arr[$item]))
writeList($arr[$item]);
echo '</li>';
}
echo '</ul>';
}
writeList($arr[0]);
or
$arr = array(
3 => array(
4 => array(
7 => null,
8 => array(
9 => null
),
),
5 => null,
),
6 => null,
);
function writeList($items){
if($items === null)
return;
echo '<ul>';
foreach($items as $item => $children){
echo '<li>'.$item;
writeList($children);
echo '</li>';
}
echo '</ul>';
}
writeList($arr);
Upvotes: 4
Reputation: 97571
Taking this format:
$data = array(
3 => array(
4 => array(
7 => null,
8 => array(
9 => null
)
),
5 => null
),
6 => null
);
Do this:
function writeList($tree)
{
if($tree === null) return;
echo "<ul>";
foreach($tree as $node=>$children)
echo "<li>", $node, writeList($children), '</li>';
echo "</ul>";
}
writeList($data);
Test it here: http://codepad.org/MNoW94YU
Upvotes: 1