一种递归函数,使用数组上的foreach循环对PHP中的父节点和子节点进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了一种递归函数,使用数组上的foreach循环对PHP中的父节点和子节点进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3354字,纯文字阅读大概需要5分钟。
内容图文
![一种递归函数,使用数组上的foreach循环对PHP中的父节点和子节点进行排序](/upload/InfoBanner/zyjiaocheng/699/ef0f12b51a094138a8d7f12023ee4f7b.jpg)
我有一个数据集存储在一个数组中,该数组使用父子id引用自己:
id,parent_id,title等.顶层的parent_id为0,并且可能存在无数的父子关系.
所以我在递归函数中使用foreach循环对这个数组进行排序,以检查每个数组元素与其父元素的关系,我想我一直都在盯着这个方法.
我最终以正确的顺序结束了元素,但我似乎无法正确嵌套我的列表,这让我觉得该方法并不真正起作用.
>这是最好的路线吗?
>我可以做些什么来改进和修复此方法
>我还有其他技巧吗?
这是我的来源:
<div>
<div>Subpages</div>
<ul>
<?php subPages($this->subpages->toArray(), 0) ?>
</ul>
<br>
<a href="javascript:;" onclick="">Add New Subpage</a>
</div>
<?php
function subPages($subpages, $parent){
foreach($subpages as $key => &$page){
$newParent = $page['id'];
//If the current page is the parrent start a new list
if($page['id'] == $parent)
{
//Echo out a new list
echo '<ul>';
echo '<li class="collapsed">';
echo '<a href="javascript:;" class="toggle">+</a>';
echo '<a href="javascript:;" onclick="">'.$page['title'].'</a>';
subPages($subpages, $newParent);
echo '</li>';
echo '</ul>';
}
//If the page's parent id matches the parent provided
else if($page['parent_id'] == $parent)
{
//Echo out the link
echo '<li class="collapsed">';
echo '<a href="javascript:;" class="toggle">+</a>';
echo '<a href="javascript:;" onclick="">'.$page['title'].'</a>';
//Set the page as the new parent
$newParent = $page['id'];
//Remove page from array
unset($subpages[$key]);
//Check the rest of the array for children
subPages($subpages, $newParent);
echo '</li>';
}
}
}
?>
与往常一样,任何帮助表示赞赏.如果不清楚,请告诉我.
解决方法:
我怀疑你们还在寻找一个真正的答案,但它可能会帮助其他人解决同样的问题.下面是一个递归函数,用于使用将子项放在父母下面的数组.
$initial = array(
array(
'name' => 'People',
'ID' => 2,
'parent' => 0
),
array(
'name' => 'Paul',
'ID' => 4,
'parent' => 2
),
array(
'name' => 'Liz',
'ID' => 5,
'parent' => 2
),
array(
'name' => 'Comus',
'ID' => 6,
'parent' => 3
),
array(
'name' => 'Mai',
'ID' => 7,
'parent' => 2
),
array(
'name' => 'Titus',
'ID' => 8,
'parent' => 3
),
array(
'name' => 'Adult',
'ID' => 9,
'parent' => 6
),
array(
'name' => 'Puppy',
'ID' => 10,
'parent' => 8
),
array(
'name' => 'Programmers',
'ID' => 11,
'parent' => 4
) ,
array(
'name' => 'Animals',
'ID' => 3,
'parent' => 0
)
);
/*---------------------------------
function parentChildSort_r
$idField = The item's ID identifier (required)
$parentField = The item's parent identifier (required)
$els = The array (required)
$parentID = The parent ID for which to sort (internal)
$result = The result set (internal)
$depth = The depth (internal)
----------------------------------*/
function parentChildSort_r($idField, $parentField, $els, $parentID = 0, &$result = array(), &$depth = 0){
foreach ($els as $key => $value):
if ($value[$parentField] == $parentID){
$value['depth'] = $depth;
array_push($result, $value);
unset($els[$key]);
$oldParent = $parentID;
$parentID = $value[$idField];
$depth++;
parentChildSort_r($idField,$parentField, $els, $parentID, $result, $depth);
$parentID = $oldParent;
$depth--;
}
endforeach;
return $result;
}
$result = parentChildSort_r('ID','parent',$initial);
print '<pre>';
print_r($result);
print '</pre>';
这是一种减速方法,它从原始数组中删除元素,并按正确的顺序将它们放入结果集中.我为你做了一些通用的,所以它只需要你告诉它你的’ID’字段和’parent’字段被调用.顶级项目需要具有0的parent_id(但是您将其命名).我还为每个项目添加深度标记,以便您可以在输出上进行格式化.
内容总结
以上是互联网集市为您收集整理的一种递归函数,使用数组上的foreach循环对PHP中的父节点和子节点进行排序全部内容,希望文章能够帮你解决一种递归函数,使用数组上的foreach循环对PHP中的父节点和子节点进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。