从string中动态创建php中的多维数组

时间:2017-01-25 19:49:07

标签: php arrays

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

  

Dashboard_Tabs_Summary<#> Dashboard_Sections_Default_View<#> Clients_Tabs_Summary<#> Clients_Tabs_Quote   历史和LT;#> Clients_Tabs_Order   历史和LT;#> 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<#>控制板LT&;#> Clients_Tabs<#> Clients_Sections_Default<#> Clients_Sections<#>客户端

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

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);

?>

1 个答案:

答案 0 :(得分:2)

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

$data = array();

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