【问题标题】:Merge/Sort Array by Name按名称合并/排序数组
【发布时间】:2019-04-07 04:37:38
【问题描述】:

我尝试按名称对数组进行排序。我想创建一个类似于菜单的结构。首先,我允许一个函数将值写入数组。然后我想将所有子页面分配给父页面(由结构引起,例如 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
)

成为。

你知道我该如何解决这个问题吗?

【问题讨论】:

  • 您最好的编码尝试在哪里?请仅使用同步的样本输入和所需的输出以获得 100% 的清晰度。您是否需要递归或者您的输入数据是可预测的“平坦”(深度不超过 2 层)?

标签: php arrays algorithm sorting


【解决方案1】:

假设菜单项是在父母先于孩子来的情况下订购的,您可以这样做:

$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',
)   

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2011-09-03
    • 2014-01-14
    相关资源
    最近更新 更多