php - 子栏目递归问题

 张珮娟7063 发布于 2022-11-22 19:57
static public function get($parentid = 0, $array = array(), $level = 0, $add = 2, $repeat = '  ') {

    $str_repeat = '';
    if ($level) {
        for($j = 0; $j < $level; $j ++) {
            $str_repeat .= $repeat;
        }
    }
    $newarray = array ();
    $temparray = array ();
    foreach ( ( array ) $array as $v ) {
        if ($v ['parent_id'] == $parentid) {
            $newarray [] = array ('id' => $v ['id'], 'catalog_name' => $v ['catalog_name'], 'catalog_name_alias' => $v ['catalog_name_alias'], 'parent_id' => $v ['parent_id'], 'level' => $level, 'sort_order' => $v ['sort_order'], 'seo_keywords' => $v ['seo_keywords'], 'seo_description' => $v ['seo_description'], 'attach_file' => $v ['attach_file'], 'attach_thumb' => $v ['attach_thumb'], 'status_is' => $v ['status_is'], 'data_count' => $v ['data_count'] , 'display_type' => $v ['display_type'], 'menu_is' => $v ['menu_is'],'template_list' => $v ['template_list'],'acl_browser' => $v ['acl_browser'],'acl_operate' => $v ['acl_operate'],'template_page' => $v ['template_page'],'template_show' => $v ['template_show'],'create_time' => $v ['create_time'], 'str_repeat' => $str_repeat, 'page_size'=>$v['page_size'] );

            $temparray = self::get ( $v ['id'], $array, ($level + $add) );
            if ($temparray) {
                $newarray = array_merge ( $newarray, $temparray );
            }
        }
    }
    return $newarray;
}

以上代码在Catalog model里,没理解错应该是递归获取子栏目这类的
现在我调用这货

Catalog::get($catalogArr['id'],$catalogArr,2,2,'>>')

返回array(0) { }

$catalogArr`打印出来的内容`array(22) { ["id"]=> string(2) "11" ["catalog_name"]=> string(12) "工作动态" ["catalog_name_alias"]=> string(4) "gzdt" ["parent_id"]=> string(1) "0" ["level"]=> int(0) ["sort_order"]=> string(1) "1" ["seo_keywords"]=> string(12) "工作动态" ["seo_description"]=> string(12) "工作动态" ["attach_file"]=> string(0) "" ["attach_thumb"]=> string(0) "" ["status_is"]=> string(1) "Y" ["data_count"]=> string(1) "0" ["display_type"]=> string(4) "list" ["menu_is"]=> string(1) "N" ["template_list"]=> string(9) "list_text" ["acl_browser"]=> string(0) "" ["acl_operate"]=> string(0) "" ["template_page"]=> string(9) "list_page" ["template_show"]=> string(9) "show_post" ["create_time"]=> string(10) "1409390084" ["str_repeat"]=> string(0) "" ["page_size"]=> string(2) "10" }

问我这样调用对吗》?为什么获取不了子栏目

1 个回答
  • 贴一个我的代码:

    /**
         * 返回多层栏目
         * @param $data 操作的数组
         * @param int $pid 一级PID的值
         * @param string $html 栏目名称前缀
         * @param string $fieldPri 唯一键名,如果是表则是表的主键
         * @param string $fieldPid 父ID键名
         * @param int $level 不需要传参数(执行时调用)
         * @return array
         */
        static public function channelLevel($data, $pid = 0, $html = "&nbsp;", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
        {
            if (empty($data)) {
                return array();
            }
            $arr = array();
            foreach ($data as $v) {
                if ($v[$fieldPid] == $pid) {
                    $arr[$v[$fieldPri]] = $v;
                    $arr[$v[$fieldPri]]['_level'] = $level;
                    $arr[$v[$fieldPri]]['_html'] = str_repeat($html, $level - 1);
                    $arr[$v[$fieldPri]]["_data"] = self::channelLevel($data, $v[$fieldPri], $html, $fieldPri, $fieldPid, $level + 1);
                }
            }
            return $arr;
        }
    

    楼主可以看下

    2022-11-22 19:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有