Слияние / сортировка массива по имени - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь отсортировать массив по имени. Я хочу создать структуру, похожую на меню. Во-первых, я разрешаю функции записывать значения в массив. Затем я хотел бы назначить все подстраницы для родителя (в результате структуры, например, URL). Из

array
(
     [0] => array
         (
             [Pages] => coreViewSites
         )

     [1] => array
         (
             [Pages / Create] => create coreView
         )

     [2] => array
         (
             [Pages / Duplicate] => coreViewSites
         )

     [3] => array
         (
             [Pages / Anarchy] => coreViewSites
         )

     [4] => array
         (
             [User] => coreViewUser
         )

)

должен массив типа

array
(
     [Pages] => Array
         (
             [0] => ABC
             [Create] => ABC
             [Duplicate] => ABC
             [Anarchy] => ABC
         )

     [User] => ABC
)

становится.

У вас есть идея, как я могу решить это?

1 Ответ

0 голосов
/ 03 ноября 2018

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

$menu = [];
foreach($input as $path) {
    $keys = explode(" / ", key($path)); // Extract the individual menu titles
    $last = array_pop($keys); // Pull the last one from it
    $loc = &$menu;
    foreach($keys as $key) {
        // Create menu item if it does not exist yet
        if (!isset($loc[$key])) $loc[$key] = []; 
        // When a menu gets sub-menu, move the title in index 0 of a new array
        if (!is_array($loc[$key])) $loc[$key] = [$loc[$key]];
        $loc = &$loc[$key]; // Set the pointer to that submenu
    }
    $loc[$last] = reset($path); // At the deepest level assign the menu title.
}
// Print result:
var_export($menu);

Выход:

array (
    'Pages' => array (
        0 => 'coreViewSites',
        'Create' => 'create coreView',
        'Duplicate' => 'coreViewSites',
        'Anarchy' => 'coreViewSites',
    ),
    'User' => 'coreViewUser',
)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...