php - 在php中从字符串动态创建多维数组

标签 php arrays

我有一段看起来像这样的字符串,它定义了我的数组的结构(从 JSTree 中的选定选项生成):

Dashboard_Tabs_Summary<#>Dashboard_Sections_Default_View<#>Clients_Tabs_Summary<#>Clients_Tabs_Quote History<#>Clients_Tabs_Order History<#>Clients_Tabs_Notes<#>Clients_Tabs_Contacts<#>Clients_Sections_Default_Create<#>Clients_Sections_Default_View<#>Clients_Sections_Default_Edit<#>Clients_Sections_Default_Delete<#>Dashboard_Tabs<#>Dashboard_Sections_Default<#>Dashboard_Sections<#>Dashboard<#>Clients_Tabs<#>Clients_Sections_Default<#>Clients_Sections<#>Clients

如果我将这个字符串分解为 <#> ,我最终得到这些行(按逻辑顺序排序):

Dashboard
Dashboard_Tabs
Dashboard_Tabs_Summary
Dashboard_Sections
Dashboard_Sections_Default
Dashboard_Sections_Default_View
Clients
Clients_Tabs
Clients_Tabs_Summary
Clients_Tabs_Quote History
Clients_Tabs_Order History
Clients_Tabs_Notes
Clients_Tabs_Contacts
Clients_Sections
Clients_Sections_Default
Clients_Sections_Default_Create
Clients_Sections_Default_View
Clients_Sections_Default_Edit
Clients_Sections_Default_Delete

有没有办法从上面变成这样的数组结构:

enter image description here

这是我的尝试,但效果不太好:

<?php

$permissions = 'Dashboard_Tabs_Summary<#>Dashboard_Sections_Default_View<#>Clients_Tabs_Summary<#>Clients_Tabs_Quote History<#>Clients_Tabs_Order History<#>Clients_Tabs_Notes<#>Clients_Tabs_Contacts<#>Clients_Sections_Default_Create<#>Clients_Sections_Default_View<#>Clients_Sections_Default_Edit<#>Clients_Sections_Default_Delete<#>Dashboard_Tabs<#>Dashboard_Sections_Default<#>Dashboard_Sections<#>Dashboard<#>Clients_Tabs<#>Clients_Sections_Default<#>Clients_Sections<#>Clients';
$permissions = explode('<#>', $permissions);

$data = [];
foreach ($permissions as $permission) {
    $p = explode('_', $permission);
    @list($p0, $p1, $p2, $p3) = $p;
    switch (sizeof($p))
    {
        case 4:
            $data[$p0][$p1][$p2][$p3] = null;
            break;

        case 3:
            $data[$p0][$p1][$p2] = null;
            break;
    }
}

echo '<pre>';
print_r($data);

?>

最佳答案

您可以使用引用来创建嵌套数组:

$data = array();

foreach(explode('<#>', $permissions) as $permission) {
    $path = explode('_', $permission);
    $temp =& $data;
    foreach($path as $key) {
        $temp =& $temp[$key];
    }
}
print_r($data);

关于php - 在php中从字符串动态创建多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860389/

相关文章:

javascript - 如何删除JS中的属性并映射新对象?

Javascript 将数组与数组对象合并

c# - 如果我将数组的大小初始化为 0 会发生什么?

javascript - 我想在 jquery 对话框中从数据库获取 id

arrays - 在 Swift 中从数组中获取多个元素的更快方法?

php - DOM PDF 仅生成 1 页 pdf 跳过剩余内容

php - CKEditor - CKFinder 在我上传图片后不会自动创建缩略图

javascript - 下划线JS : trim array of objects based on condition

php - 检查约束不起作用

php - 从字符串中拆分数字和拉丁字母