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