//从数据库中取出的分类数据

$original_array = array(

  array('id' => 1,'pid' => 0,'name' => '新闻分类'),

  array('id' => 2,'pid' => 0,'name' => '最新公告'),

  array('id' => 3,'pid' => 1,'name' => '国内新闻'),

  array('id' => 4,'pid' => 1,'name' => '国际新闻'),

  array('id' => 5,'pid' => 0,'name' => '图片分类'),

  array('id' => 6,'pid' => 5,'name' => '新闻图片'),

  array('id' => 7,'pid' => 5,'name' => '其它图片')

);

同时,数据库是这个样子的。
说明:数据库的分类就是这个样子的!取出来的数组也是这个样子的!一般这样子的!

//从数据库中取出的分类数据

$original_array = array(

  array(

    'id' => 1,

    'pid' => 0,

    'name' => '新闻分类'

  ),

  array(

    'id' => 2,

    'pid' => 0,

    'name' => '最新公告'

  ),

  array(

    'id' => 3,

    'pid' => 1,

    'name' => '国内新闻'

  ),

  array(

    'id' => 4,

    'pid' => 1,

    'name' => '国际新闻'

  ),

  array(

    'id' => 5,

    'pid' => 0,

    'name' => '图片分类'

  ),

  array(

    'id' => 6,

    'pid' => 5,

    'name' => '新闻图片'

  ),

  array(

    'id' => 7,

    'pid' => 5,

    'name' => '其它图片'

  )

);

很明显,这里数组多了一个字段,就是 children!

那么,怎么 从 $original_array 变为 $output_array呢?这里有我一个朋友做的函数,当然也用到 foreach!

函数如下:

//整理函数

/**

 * 生成无限级树算法

 * @author Baiyu 2014-04-01

 * @param array $arr        输入数组

 * @param number $pid        根级的pid

 * @param string $column_name    列名,id|pid父id的名字|children子数组的键名

 * @return array $ret

 */

function make_tree($arr, $pid = 0, $column_name = 'id|pid|children') {

  list($idname, $pidname, $cldname) = explode('|', $column_name);

  $ret = array();

  foreach ($arr as $k => $v) {

    if ($v [$pidname] == $pid) {

      $tmp = $arr [$k];

      unset($arr [$k]);

      $tmp [$cldname] = make_tree($arr, $v [$idname], $column_name);

      $ret [] = $tmp;

    }

  }

  return $ret;

}

完整使用方法如下:

$output_array =make_tree($arr, 0, 'id|pid|children')

函数之后,我们这样调用就得到了一级分类与二级分类!

 

foreach ($output_array as $key => $value) {

  echo '
'.$value['name'].'
';

  foreach ($value['children'] as $key => $value) {

    echo $value['name'].',';

}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。