首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中组织多维数组?

如何在PHP中组织多维数组?
EN

Stack Overflow用户
提问于 2011-03-03 01:18:55
回答 3查看 644关注 0票数 2

我有如下的类别层次结构,但我不知道如何列出,尽管他们有父母。

代码语言:javascript
复制
 $array[1] = 'A';
 $array[1]['children'][1] = 'A1';
 $array[1]['children'][2] = 'A2';

 $array[2] = 'B';
 $array[2]['children'][1] = 'B1';
 $array[2]['children'][1]['children'][1] = 'B1-1';
 $array[2]['children'][1]['children'][2] = 'B1-2';

它应该类似于未排序的列表标记(ul > li):

代码语言:javascript
复制
 A
   A1
   A2
 B
   B1
     B1-1
     B1-2

那么,如何使用多维数组创建这个类别列表呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-03 01:31:52

首先,您的数组声明是错误的,您首先将'A‘赋值给$array[1],然后尝试在关联数组中“转换”$array[1]以添加子对象。

你可以这样做:

代码语言:javascript
复制
 $array[1]['name'] = 'A';
 $array[1]['children'][1]['name'] = 'A1';
 $array[1]['children'][2]['name'] = 'A2';

 $array[2]['name'] = 'B';
 $array[2]['children'][1]['name'] = 'B1';
 $array[2]['children'][1]['children'][1]['name'] = 'B1-1';
 $array[2]['children'][1]['children'][2]['name'] = 'B1-2';

然后,您可以使用如下所示的函数显示列表:

代码语言:javascript
复制
function make_list($array) {
    echo '<ul>';
    foreach ($array as $a) {
        echo '<li>' . $a['name'];
        if (isset($a['children']) && is_array($a['children'])) {
            make_list($a['children']);
        }
        echo '</li>';
    }
    echo '</ul>';
}

我希望我的代码是清晰的。

票数 2
EN

Stack Overflow用户

发布于 2011-03-03 01:32:23

由于似乎不需要任何辅助属性,因此既不应该从枚举数组开始,也不应该使用children子数组。在您的例子中,您可以使用条目作为键名:

代码语言:javascript
复制
$hierarchy["A"] = array();
$hierarchy["A"]["A1"] = array();
$hierarchy["A"]["A2"] = array();

$hierarchy["B"] = array();
$hierarchy["B"]["B1"] = array();
$hierarchy["B"]["B2"]["B1-1"] = array();
$hierarchy["B"]["B2"]["B1-2"] = array();

这种结构简单地假设所有条目都可以有子项,因此无论如何都可以是数组。请注意如何将其压缩为:

代码语言:javascript
复制
$hierarchy = array(
    "A" => array(
        "A1" => array(), 
        "A2" => array(),
    ),
    "B" => array(
        "B1" => array(
            "B1-1" => array(),
            "B1-2" => array(),
        ), 
    ),
);

排序被保留,因为PHP数组无论如何都是有序字典。

迭代该结构与其他变体类似,不同之处在于实际数据已经包含在键中。

票数 2
EN

Stack Overflow用户

发布于 2011-03-03 01:21:43

处理多维数组的正确方法是使用递归。伪代码将是:

代码语言:javascript
复制
function tree($data){
    if (has_kids($data))
        return tree($data['kids']);
    }
    return $data[0];
}
var_dump(tree($data));

此外,要了解理论,请查看this article,关于树遍历(多维类别是树的示例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5171023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档