php tree & lt; table & gt; вывод тега из массива иерархии

у нас есть этот массив из вывода запроса MySQL:

Array
(
[0] => Array
(
[value] => value1
[id] => 1
[title] => title1
[parent_id] => 0
)

[1] => Array
(
[value] => value2
[id] => 2
[title] => title2
[parent_id] => 1
)

[2] => Array
(
[value] => value3
[id] => 3
[title] => title3
[parent_id] => 0
)

[3] => Array
(
[value] => value4
[id] => 4
[title] => title4
[parent_id] => 3
)

)

тогда нам нужно визуализировать этот вывод html, используя функцию php:

<table  id="1" >
<!-- thead for  parent_id==0 index -->
<thead>
<tr>
<td width="40%">title1</td>
<td width="60%">value1</td>
</tr>
</thead>

<!-- childrens -->
<tr>
<td>title2</td>
<td>value2</td>
</tr>
</table><table  id="2" >
<!-- thead for  parent_id==0 index -->
<thead>
<tr>
<td width="40%">title3</td>
<td width="60%">value3</td>
</tr>
</thead>

<!-- childrens -->
<tr>
<td>title4</td>
<td>value4</td>
</tr>
</table>

Может кто-нибудь мне помочь ? Возможно, это очень просто, но я уже все безуспешно перепробовал !!

что-то подобное:

<?php

function generateTree($datas, $parent = 0, $limit=0){
if($limit > 1000) return ''; // Make sure not to have an endless recursion
$tree = '';
$tree = '<table>';
for($i=0, $ni=count($datas); $i < $ni; $i++){
if($datas[$i]['parent_id'] == $parent){
$tree .= '<tr>';
$tree .= $datas[$i]['title'].'='.$datas[$i]['value'];
$tree .= generateTree($datas, $datas[$i]['id'], $limit++);
$tree .= '</tr>';
}
}
$tree .= '</table>';
return $tree;
}

echo generateTree($myArray);
?>

-1

Решение

это ответ

//index elements by id
foreach ($resutls as $item) {
$item['subs'] = array();
$indexedItems[$item['id']] = (object) $item;
}

//assign to parent
$topLevel = array();
foreach ($indexedItems as $item) {
if ($item->parent_id == 0) {
$topLevel[] = $item;
} else {
$indexedItems[$item->parent_id]->subs[] = $item;
}
}//recursive function
function renderTree($items) {
$render = "";
$i=0;
foreach ($items as $item)
{
if(!empty($item->subs))
{
$i++;
$render .= '<table  id="t'.$i.'">'."\n<thead>\n<tr>\n<td width='40%'>" . $item->title."</td>\n<td width='60%'></td>\n</tr>\n</thead>\n";
}else{
$render .= "\n<tr>\n<td>" . $item->title."</td>\n<td>".$item->value."</td>\n</tr>\n";
}

if (!empty($item->subs))
{
$render .= renderTree($item->subs);
}
if(!empty($item->subs))
{
$render .= "</table>\n\n";
}
}

return $render;
}

echo renderTree($topLevel);
0

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

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

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