【发布时间】:2015-01-18 20:51:19
【问题描述】:
更新:
这是一个从 mysql 获取的平面数组。我使用闭包表来存储层次关系:
Array
(
[0] => Array
(
[brand] => Intel
[id] => 53
[name] => CPU 1978
[parent_id] => 0
)
[1] => Array
(
[brand] => Asus
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
[2] => Array
(
[brand] => HTC
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
我有一些数据显示新产品基于哪些古老产品。我正在使用以下代码将平面数组转换为分层的多维数组:
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
结果:
Array
(
[0] => Array
(
[brand] => Intel
[id] => 53
[name] => CPU 1978
[parent_id] => 0
[children] => Array
(
[0] => Array
(
[brand] => Asus
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
[1] => Array
(
[brand] => HTC
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
)
)
我想通过在第一级添加一个新键 brands 来重组树,并将儿童品牌提取为第二级的数组键,如下所示:
Array
(
[0] => Array
(
[brand] => Intel
[id] => 53
[name] => CPU 1978
[parent_id] => 0
[brands]=> Array
(
[Asus]=> Array
(
[0] => Array
(
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
)
[HTC] => Array
(
[0]=>Array
(
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
[Intel]=>Array() // Keep this one for new CPU from Intel
)
)
)
我已经尝试创建一个更多的功能,将品牌插入父级,但我的问题是,我怎样才能将孩子的 CPU 放入相应的品牌中?
function brand(array $elements,$children){
$branch = array();
foreach($elements as $k=>$element){
/* if($element['brand'] == $children['brand']) not working **/
$branch[$element['brand']] = $children;
}
return $branch;
}
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['brands'] = brand($elements,$children);
}
$branch[] = $element;
}
}
return $branch;
}
这给了我这个结果:
Array
(
[0] => Array
(
[brand] => Intel
[id] => 53
[name] => CPU 1978
[parent_id] => 0
[brands]=> Array
(
[Asus]=> Array
(
[0] => Array
(
[brand]=> Asus
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
[1]=>Array
(
[brand]=>HTC
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
[HTC] => Array
(
[0] => Array
(
[brand]=> Asus
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
[1]=>Array
(
[brand]=>HTC
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
[Intel]=>Array(
(
[0] => Array
(
[brand]=> Asus
[id] => 537
[name] => CPU 1999
[parent_id] => 53
)
[1]=>Array
(
[brand]=>HTC
[id] => 538
[name] => CPU 1998
[parent_id] => 53
)
)
)
)
)
)
【问题讨论】:
-
您能否分享您用于进一步处理的第一个数组。这将有助于为您的问题提供正确的答案。
-
@anantkumarsingh 查看我的帖子。我已经用从 mysql 获取的数组更新了它,用于构建层次数组。
标签: php arrays tree hierarchical-data