首页 / PHP / PHP无限级分类代码问题
PHP无限级分类代码问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP无限级分类代码问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3626字,纯文字阅读大概需要6分钟。
内容图文
![PHP无限级分类代码问题](/upload/InfoBanner/zyjiaocheng/152/e2a66ec5ed7649adac64536b4236a0cd.jpg)
网上的栗子看了些,貌似写法跟我的不一样。
数组结构如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 代码
[parent] => 0
)
[1] => Array
(
[id] => 3
[name] => 动漫
[parent] => 0
)
[2] => Array
(
[id] => 4
[name] => 治愈
[parent] => 3
)
[3] => Array
(
[id] => 5
[name] => 励志
[parent] => 3
)
[4] => Array
(
[id] => 6
[name] => 机战
[parent] => 3
)
[5] => Array
(
[id] => 7
[name] => 百合
[parent] => 3
)
[6] => Array
(
[id] => 8
[name] => 资源
[parent] => 0
)
[7] => Array
(
[id] => 9
[name] => app
[parent] => 8
)
[8] => Array
(
[id] => 10
[name] => 软件
[parent] => 8
)
[9] => Array
(
[id] => 11
[name] => 黑科技
[parent] => 8
)
)
其中 id
为分类唯一ID, parent
为父类ID
我写的代码 如下:
function all($id=0){
static $_class = null;
if(is_null($_class))
$_class = select(); //这个得出来的就是以上的数组结构,然后赋值给了`$_class`变量
$result = array();
foreach($_class as $k => $v){
if($v['parent'] == $id){
unset($_class[$k]);
$v = array_merge($v, $this->all($v['id']));
$result['child'][] = $v;
}
}
return $result;
}
print_r(all(0));
回复内容:
自己试着写了个无限级分类的,结果有些问题,想了很长时间了,感觉代码没问题呀,可就是结果不正确。现在整个人都懵了....
网上的栗子看了些,貌似写法跟我的不一样。
数组结构如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 代码
[parent] => 0
)
[1] => Array
(
[id] => 3
[name] => 动漫
[parent] => 0
)
[2] => Array
(
[id] => 4
[name] => 治愈
[parent] => 3
)
[3] => Array
(
[id] => 5
[name] => 励志
[parent] => 3
)
[4] => Array
(
[id] => 6
[name] => 机战
[parent] => 3
)
[5] => Array
(
[id] => 7
[name] => 百合
[parent] => 3
)
[6] => Array
(
[id] => 8
[name] => 资源
[parent] => 0
)
[7] => Array
(
[id] => 9
[name] => app
[parent] => 8
)
[8] => Array
(
[id] => 10
[name] => 软件
[parent] => 8
)
[9] => Array
(
[id] => 11
[name] => 黑科技
[parent] => 8
)
)
其中 id
为分类唯一ID, parent
为父类ID
我写的代码 如下:
function all($id=0){
static $_class = null;
if(is_null($_class))
$_class = select(); //这个得出来的就是以上的数组结构,然后赋值给了`$_class`变量
$result = array();
foreach($_class as $k => $v){
if($v['parent'] == $id){
unset($_class[$k]);
$v = array_merge($v, $this->all($v['id']));
$result['child'][] = $v;
}
}
return $result;
}
print_r(all(0));
unset($_class[$k]);
这一行去掉
鉴于你这个还是用的递归来完成的,我这里提供2个方法,一个是递归的,一个是指针形态的。
第二个可能您暂时无法理解,但是为帮助您学习,以及方便到他人,以下是代码:
使用递归
// 呃,我真不忍心写出这个循环那么多遍的代码,求神解救我。
function _data_to_tree(&$items, $topid = 0, $with_id = TRUE)
{
$result = [];
foreach($items as $v)
if ($topid == $v['parent']) {
$r = $v + ['children' => _data_to_tree($items, $v['id'], $with_id)];
if ($with_id)
$result[$v['id']] = $r;
else
$result[] = $r;
}
return $result;
}
使用PHP的指针特性
function _data_to_tree($items, $topid = 0, $with_id = TRUE)
{
if ($with_id)
foreach ($items as $item)
$items[ $item['parent'] ]['children'][ $item['id'] ] = &$items[ $item['id'] ];
else
foreach ($items as $item)
$items[ $item['parent'] ]['children'][] = &$items[ $item['id'] ];
return isset($items[ $topid ]['children']) ? $items[ $topid ][ 'children' ] : [];
}
使用
传入你的上述数组,比如最顶层的ID为0
$data = [
['id' => 4, 'parent' => 1 , 'text' => 'Parent1'],
['id' => 1, 'parent' => 0 , 'text' => 'Root'],
['id' => 2, 'parent' => 1 , 'text' => 'Parent2'],
['id' => 3, 'parent' => 2 , 'text' => 'Sub1'],
];
print_r ( _data_to_tree($data, 0) );
结果
Array
(
[1] => Array
(
[id] => 1
[parent] => 0
[text] => Root
[children] => Array
(
[4] => Array
(
[id] => 4
[parent] => 1
[text] => Parent1
[children] => Array
(
)
)
[2] => Array
(
[id] => 2
[parent] => 1
[text] => Parent2
[children] => Array
(
[3] => Array
(
[id] => 3
[parent] => 2
[text] => Sub1
[children] => Array
(
)
)
)
)
)
)
)
内容总结
以上是互联网集市为您收集整理的PHP无限级分类代码问题全部内容,希望文章能够帮你解决PHP无限级分类代码问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。