PHP递归问题,数据总是对不上

我有这样一条sql:

SELECT

*,

IF (

`pid` > 0,

concat('0', ',', `pid`, ',', `id`),

concat(`pid`, ',', `id`)

) new_str

FROM

`shop`

WHERE

`deleted_at` IS NULL

AND `type` < 2

AND `status` = 1

ORDER BY

new_str DESC,

id DESC

图片描述

但是我使用这样的方式:

SELECT * FROM `shop` WHERE `deleted_at` IS NULL AND `type` < 2 AND `status` = 1 order by id desc

递归的方法如下:

   /**

* 树状结构

*

*/

function getTree($cates, $pid = 0)

{

static $tree = [];

foreach ($cates as $cate) {

if ($cate['pid'] == $pid) {

//父类数组赋给$tree数组

$tree[] = $cate;

$this->getTree($cates, $cate['id']);

}

}

return $tree;

}

结果确实少了一条
图片描述

我查询了一下 也没有重复的条数:

SELECT

*

FROM

`shop`

WHERE

`deleted_at` IS NULL

AND `type` < 2

AND `status` = 1

GROUP BY

`name`

HAVING

COUNT(*) > 1

我递归错误的地方在哪里呢?

回答:

这样也是少一个,此处仅是为了记录

 /**

* 递归查找父id为$parid的结点

* @param array $html 按照父-》子的结构存放查找出来的结点

* @param int $parid 指定的父id

* @param array $channels 数据数组

* @param int $dep 遍历的深度,初始化为1

*/

function getChild(&$html, $parid, $channels)

{

//遍历数据,查找parId为参数$parid指定的id

for ($i = 0; $i < count($channels); $i++) {

if ($channels[$i]['pid'] == $parid) {

$html[] = $channels[$i];

$this->getChild($html, $channels[$i]['id'], $channels);

}

}

return $html;

}

$html = [];

$data = $this->getChild($html,0,$data);

回答:

参考

/**

* 得到树型结构

* @param int ID,表示获得这个ID下的所有子级

* @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"

* @param int 被选中的ID,比如在做树型下拉框的时候需要用到

* @return string

*/

public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = ''){

$number=1;

$child = $this->get_child($myid);

if(is_array($child)){

$total = count($child);

foreach($child as $id=>$value){

$j=$k='';

if($number==$total){

$j .= $this->icon[2];

}else{

$j .= $this->icon[1];

$k = $adds ? $this->icon[0] : '';

}

$spacer = $adds ? $adds.$j : '';

$selected = $id==$sid ? 'selected' : '';

@extract($value);

$pid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");

$this->ret .= $nstr;

$nbsp = $this->nbsp;

$this->get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group);

$number++;

}

}

return $this->ret;

}

来源:
https://noteapps.github.io/ec...

以上是 PHP递归问题,数据总是对不上 的全部内容, 来源链接: utcz.com/p/188972.html

回到顶部