将值插入到动态生成的多维数组中
问题描述:
我在寻找,但我没有找到我所需要的。将值插入到动态生成的多维数组中
来源结构是动态的,从MySQL数据库生成菜单阵列结构:
array (
2 => array (
'title' => 'item',
'children' => array (
10 => array (
'title' => 'item',
'children' => array (
14 => array (
'title' => 'item',
),
15 => array (
'title' => 'item',
),
16 => array (
'title' => 'item',
'children' => array (
23 => array (
'title' => 'item',
),
24 => array (
'title' => 'item',
),
),
),
17 => array (
'title' => 'item',
'children' => array (
20 => array (
'title' => 'item',
),
),
),
18 => array (
'title' => 'item',
),
19 => array (
'title' => 'item',
),
32 => array (
'title' => 'item',
'children' => array (
33 => array (
'title' => 'item',
),
),
),
59 => array (
'title' => 'item',
),
60 => array (
'title' => 'item',
'children' => array (
61 => array (
'title' => 'item',
),
62 => array (
'title' => 'item',
),
),
),
67 => array (
'title' => 'item',
),
),
),
12 => array (
'title' => 'item',
),
13 => array (
'title' => 'item',
),
),
),
)
我需要通过的所有记录,并根据需要对当前地方在foreach实际上是增加新的价值。现在我可以使用此功能查看记录以进行记录:
function categorize($menu, $level = 0)
{
foreach ($menu as $key => &$data)
{
if (isset ($data['children']))
{
categorize($data['children'], ($level + 1));
}
}
}
但是不知道如何将新值添加到正确的位置。 输出必须是这样的:
array (
2 => array (
'level' => 0,
'first-item' => true,
'title' => 'item',
'children' => array (
10 => array (
'level' => 1,
'first-item' => true,
'title' => 'item',
'children' => array (
14 => array (
'level' => 2,
'first-item' => true,
'title' => 'item',
),
15 => array (
'level' => 2,
'title' => 'item',
),
16 => array (
'level' => 2,
'title' => 'item',
'children' => array (
23 => array (
'level' => 3,
'first-item' => true,
'title' => 'item',
),
24 => array (
'level' => 3,
'title' => 'item',
),
),
),
17 => array (
'level' => 2,
'title' => 'item',
'children' => array (
20 => array (
'level' => 3,
'title' => 'item',
),
),
),
18 => array (
'level' => 2,
'title' => 'item',
),
19 => array (
'level' => 2,
'title' => 'item',
), ....
谢谢您的帮助
答
您可以使用引用和递归以获得您想要的输出:
function processTitles(array &$titles, $level = 0) {
$i = 0;
foreach ($titles as &$title) {
$title['level'] = $level;
$title['first-item'] = ++$i === 1;
if (!empty($title['children'])) {
processTitles($title['children'], ++$level);
}
}
}
$titles = [
// The input data that you posted
];
processTitles($titles);
var_dump($titles);
您是否使用直PHP或用像Laravel这样的框架? – kerrin
我使用直接的PHP。 – netoper