gpt4 book ai didi

php - 如何从此结果集创建一个数组(嵌套类别存储在具有遍历模型的数据库中)?

转载 作者:可可西里 更新时间:2023-11-01 08:38:06 24 4
gpt4 key购买 nike

基于这个问题: Getting a modified preorder tree traversal model (nested set) into a <ul>

下面的逻辑用于构建有序列表,但是如何对数组做同样的事情呢?

我想构建一个嵌套数组。

// bootstrap loop
$result = '';
$currDepth = -1; // -1 to get the outer <ul>
while (!empty($tree)) {
$currNode = array_shift($tree);
// Level down?
if ($currNode['depth'] > $currDepth) {
// Yes, open <ul>
$result .= '<ul>';
}
// Level up?
if ($currNode['depth'] < $currDepth) {
// Yes, close n open <ul>
$result .= str_repeat('</ul>', $currDepth - $currNode['depth']);
}
// Always add node
$result .= '<li>' . $currNode['title'] . '</li>';
// Adjust current depth
$currDepth = $currNode['depth'];
// Are we finished?
if (empty($tree)) {
// Yes, close n open <ul>
$result .= str_repeat('</ul>', $currDepth + 1);
}
}

print $result;

最佳答案

啊,终于有一些方便引用的东西了:

<?php
$tree = array(
array('Cat 1', 'depth' => 0),
array('Cat 2', 'depth' => 1),
array('Cat 3', 'depth' => 1),
array('Cat 4', 'depth' => 2),
array('Cat 5', 'depth' => 1),
array('Cat 6', 'depth' => 2),
array('Cat 7', 'depth' => 3),
array('Cat 8', 'depth' => 1)
);
//same as before
$currDepth = -1;

//initilialize result
$result = array();

//create path structure for depths
$path = array();

//create 'root' node
$olditem = array('children'=> &$result);


foreach($tree as $item){
if($item['depth'] > $currDepth){
//remove possible old reference (old depth of other branch
if(isset($path[$item['depth']])) unset($path[$item['depth']]);

//make sure we have an array entry
if(!isset($olditem['children'])) $olditem['children'] = array();

//acquire target
$path[$item['depth']] = &$olditem['children'];
}
if($item['depth'] != $currDepth) unset($olditem);
//set correct target
$currDepth = $item['depth'];
//add item
$path[$currDepth][] = &$item;
//copy & remove reference
$olditem = &$item;
unset($item);
}
//always nice to clean up reference bombs:
unset($path);
unset($olditem);

var_dump($result);
?>

关于php - 如何从此结果集创建一个数组(嵌套类别存储在具有遍历模型的数据库中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com