php树<;表>;标记从层次结构数组输出


php tree <table> tag output from hierarchy array

我们有一个来自mysqli查询输出的数组:

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
        )
)

然后我们需要使用php函数呈现这个html输出:

<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);
?>

这是的答案

//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);