php - 按名称合并/排序数组
问题描述
我尝试按名称对数组进行排序。我想创建一个类似于菜单的结构。首先,我允许一个函数将值写入数组。然后我想将所有子页面分配给父页面(由结构引起,例如 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
)
变得。
你知道我该如何解决这个问题吗?
解决方案
假设菜单项是在父母先到孩子的情况下订购的,您可以这样做:
$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',
)
推荐阅读
- django - 禁止直接分配到多对多集合的前端。改用 variant.set()
- python - 检索图像的隐藏 URL(没有附件的图像,仅 url)
- visual-studio - 如何让 ApprovalTests 创建 UTF-8 文件
- c - 代码由于类型错误而无法编译但未给出任何运行时错误的示例
- typescript - 没有明确未定义的打字稿可选字段
- django - 根据先前选择的选项显示 Django Fieldset 值?
- reactjs - 如何在 FieldArray 中包含不同值的数组的 yup 验证中添加错误消息?
- amazon-redshift - Redshift 将一个值转换为 bigint 会舍入一个值
- oracle - 将日期差异转换为带有时间戳的日期
- api - Autotask Rest API 工单收费状态