2017-02-03 3 views
-1

У меня есть массив как это:массив группировки PHP в суб массив

$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')) 
    ) 
); 
+0

попытайтесь сохранить ваши меню в форме 'id' и' parent id'. –

+0

[PHP Arrays] (http://php.net/manual/en/language.types.array.php) - хорошее место, чтобы начать понимать, как работают массивы PHP. –

ответ

0

Вы можете использовать array_reduce() с помощью пользовательских агрегатной функции и новый array() как начальное значение.

Или перейдите по списку, чтобы угадать родителей из текста меню: в вашем случае может быть сложно, потому что родительский провод не является явным атрибутом элемента.

Похожий вопрос: create array tree from array list

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>'; 
+0

@dario спасибо за предложения. У меня есть решение по этой ссылке http://stackoverflow.com/questions/8840319/build-a-tree-from-a-flat-array-in-php –

Смежные вопросы