php - 从分层表创建一个平面数组

标签 php mysql arrays hierarchy

我有一个包含 id、parent_id 和 name 字段的表,
一个 parent 可以有多个 child ,但 child 只有一个 parent 。

在获取时,数组看起来像

Array
(
[0] => Array
    (
        [id] => 1
        [parent_id] => 0
        [name]=>firstName
    )

[1] => Array
    (
        [id] => 2
        [parent_id] => 1
        [name]=>childFirstName
    )

[2] => Array
    (
        [id] => 3
        [parent_id] => 0
        [name]=>SecondName
    )

[3] => Array
    (
        [id] => 4
        [parent_id] => 3
        [name]=>childSecondName
    )


)

从这张表中,我想要一个平面数组,应该是这样的..

//数组的key是表行的id,id对应的值为parent_name >name

Array
 ( 
   [1]=>[firstName],// [row_id]=>[name with parent]
   [2]=>[firstName>childFirstName],
   [3]=>[secondName],
   [4]=>[secondName>childSecondName]
 )

最佳答案

<?php

$arr=array(
array("id" => 1, "parent_id" => 0, "name"=>"firstName"),
array("id" => 2, "parent_id" => 1, "name"=>"childFirstName"),
array("id" => 3, "parent_id" => 0, "name"=>"SecondName"),
array("id" => 4, "parent_id" => 3, "name"=>"childSecondName")
);

class test
{
  var $arr=array();

  function get_name($id)
  {
     $str='';
     if(isset($this->arr[$id]))
     {
        $parent_id=$this->arr[$id]['parent_id'];
        if($parent_id!=0) $str=$this->get_name($parent_id).'>';
        $str.=$this->arr[$id]['name'];
     }
     return $str;
  }

  function convert($arr)
  {
     foreach($arr as $row)
     {
       $this->arr[$row['id']]=$row;
     }

     reset($this->arr);
     $res=array();
     foreach($this->arr as $id=>$row)
     {
       $res[$id]=$this->get_name($id);
     }
     return $res;
  }
}

$c=new test();
$res=$c->convert($arr);
print_r($res);

关于php - 从分层表创建一个平面数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15241190/

相关文章:

javascript - 从 span 元素数组获取同级复选框输入

php - 拒绝访问 htaccess 中的多个文件

页面之间的PHP session 变量变化

javascript - Json输出显示打印漂亮

php - 当我尝试从 CodeIgniter 中的连接表回显数据时,没有任何反应

来自两个不同数组的JAVA数组串联

php - 如何获取当前页面的源代码作为php中的变量

php - 使用按钮 PHP MySQL 将变量值传递到另一个页面

php - 多项选择并添加更多字段不起作用

c - 输入字母字符时,Tic-Tac-Toe 用户输入无休止地循环