数组将php分组为子数组

时间:2017-02-03 09:44:06

标签: php arrays

我有一个这样的数组:

$array = array(
    array('menu' => 'Menu Parent 1', 'link' => '#'),
    array('menu' => 'Sub Menu Parent 1', 'link' => '/submenu1'),
    array('menu' => 'Menu Parent 2', 'link' => '#'),
    array('menu' => 'Sub Menu Parent 2.1', 'link' => '/submenu21'),
    array('menu' => 'Sub Menu Parent 2.2', 'link' => '/submenu22'));

如何将其转换为以下数组?

$array = array(
    array('menu' => 'Menu Parent 1', 'link' => '#',
          'submenu' => array(array('menu' => 'Sub Menu Parent 1', 'link' => '/submenu1'))
    ),
    array('menu' => 'Menu Parent 2', 'link' => '#',
        'submenu' => array(array('menu' => 'Sub Menu Parent 2.1', 'link' => '/submenu21'),
                           array('menu' => 'Sub Menu Parent 2.2', 'link' => '/submenu22'))
    )
);

2 个答案:

答案 0 :(得分:0)

您可以使用自定义聚合函数array_reduce()和新array()作为初始值。

或者遍历列表,从菜单文本中寻找猜测父项:在您的情况下可能会很复杂,因为父线未明确作为元素属性。

类似的问题:create array tree from array list

答案 1 :(得分:0)

真的不知道你想要做什么,但可能会遵循以下代码来帮助你澄清你的疑问。

<?php
$data = array(
    array('menu' => 'Menu Parent 1', 'link' => '#'),
    array('menu' => 'Sub Menu Parent 1', 'link' => '/submenu1'),
    array('menu' => 'Menu Parent 2', 'link' => '#'),
    array('menu' => 'Sub Menu Parent 2.1', 'link' => '/submenu21'),
    array('menu' => 'Sub Menu Parent 2.2', 'link' => '/submenu22')
);

$updatedData[0] = $data[0];
$updatedData[0]['submenu'] = array($data[1]);

$updatedData[1] = $data[2];
$updatedData[1]['submenu'] = array($data[3],$data[4]);

echo '<pre>';
print_r($updatedData);
echo '</pre>';