繁体   English   中英

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

[英]How to organize multi-dimensional arrays in PHP?

我具有如下的类别层次结构,但是我不知道该如何列出所有具有父级的对象。

 $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):

 A
   A1
   A2
 B
   B1
     B1-1
     B1-2

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

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

您可以执行以下操作:

 $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';

然后,您可以使用以下功能显示列表:

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>';
}

我希望我的代码清楚。

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

$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();

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

$hierarchy = array(
    "A" => array(
        "A1" => array(), 
        "A2" => array(),
    ),
    "B" => array(
        "B1" => array(
            "B1-1" => array(),
            "B1-2" => array(),
        ), 
    ),
);

之所以保留顺序,是因为PHP数组仍然是顺序字典。

在该结构上进行迭代与其他变体相似,除了实际数据已包含在键中。

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

function tree($data){
    if (has_kids($data))
        return tree($data['kids']);
    }
    return $data[0];
}
var_dump(tree($data));

另外,要了解理论,请查阅本文 ,了解关于树木遍历的知识(多维类别是树木的示例)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM