【发布时间】:2019-04-12 08:58:04
【问题描述】:
我需要按级别列对数组进行分层排序。
我从 HTML 标头(h1、h2、h3 ...)中提取这些数据,并需要将它们分层组织在一个数组中。基本上这将用于显示“目录”。
** 已编辑 **
// The soluction (Thanks @trincot)
static public function build_hierarchy( &$links, $level = 1 ) {
$result = [];
while (current($links)) {
if ( current($links)["level"] > $level ) {
$result[ count($result)-1 ]["children"] = static::build_hierarchy($links, $level+1);
}
if (current($links)["level"] < $level ) return $result; // backtrack
$result[] = current($links);
next($links);
}
return $result;
}
我有以下数组:
Array(
[0] = Array(
'level' => '1',
'id' => 'item 1',
'content' => 'item 1'
),
[1] = Array(
'level' => '1',
'id' => 'item 2',
'content' => 'item 2'
),
[2] = Array(
'level' => '2',
'id' => 'item 3',
'content' => 'item 3'
),
[3] = Array(
'level' => '2',
'id' => 'item 4',
'content' => 'item 4'
),
[4] = Array(
'level' => '2',
'id' => 'item 5',
'content' => 'item 5'
),
[5] = Array(
'level' => '3',
'id' => 'item 6',
'content' => 'item 6'
),
[6] = Array(
'level' => '1',
'id' => 'item 7',
'content' => 'item 7'
),
)
我需要输出(按级别列):
Array(
[0] = Array(
'level' => '1',
'id' => 'item 1',
'content' => 'item 1'
),
[1] = Array(
'level' => '1',
'id' => 'item 2',
'content' => 'item 2',
'childrens' => Array(
[0] = Array(
'level' => '2',
'id' => 'item 3',
'content' => 'item 3'
),
[1] = Array(
'level' => '2',
'id' => 'item 4',
'content' => 'item 4'
),
[2] = Array(
'level' => '2',
'id' => 'item 5',
'content' => 'item 5',
'childrens' => Array(
[0] = Array(
'level' => '3',
'id' => 'item 6',
'content' => 'item 6'
)
)
),
)
),
[2] = Array(
'level' => '1',
'id' => 'item 7',
'content' => 'item 7'
)
)
我做不到!我需要你的帮助。
** 更新 1:**
我的逻辑不能顺其自然!我试了两天!例如,我不知道如何从从 3 级到 1 级,这似乎是不可能的!
【问题讨论】:
-
简单来说就是按顺序遍历数组,遇到deeper层级就添加子数组,遇到同层级就不断添加当前的数组,遇到更高的级别就回上去,对吗?
-
@deceze 对!但是该怎么做呢?
标签: php arrays recursion logic