Php将字符串转换为组的数组?

Php将字符串转换为组的数组?,php,multidimensional-array,explode,string-function,Php,Multidimensional Array,Explode,String Function,我在字符串上有一个组,我想按组和子组分解 比如说 operation.user.add operation.user.edit operation.permission.add performance.tool.add performance.tool.remove operation.permission.edit operation.tool.delete operation.tool.remove 结果如下: Array ( ['operation'] => Array (

我在字符串上有一个组,我想按组和子组分解

比如说

operation.user.add
operation.user.edit
operation.permission.add
performance.tool.add
performance.tool.remove
operation.permission.edit
operation.tool.delete
operation.tool.remove
结果如下:

Array
(
['operation'] => Array
    (
        ['user'] => Array
            (
                [0] => 'add',
                [1] => 'edit'
            ),
        ['permission'] => Array
            (
                [0] => 'add',
                [1] => 'edit'
            ),
        ['tool'] => Array
            (
                [0] => 'delete',
                [1] => 'remove'
            ),
    ),
['performance'] => Array
    (
        ['tool'] => Array
            (
                [0] => 'add',
                [1] => 'remove'
            )
    )
)

有人能给出我如何将字符串转换成数组的解决方案吗

假设这是一个字符串值,这可能是您所能得到的最有效的:

$str = 'operation.user.add
operation.user.edit
operation.permission.add
performance.tool.add
performance.tool.remove
operation.permission.edit
operation.tool.delete
operation.tool.remove';
$output = [];
foreach (explode("\n", $str) as $string) {
    $parts = explode('.', $string);
    $output[$parts[0]][$parts[1]][] = $parts[2];
}
print_r($output);
输出:

Array
(
    [operation] => Array
        (
            [user] => Array
                (
                    [0] => add
                    [1] => edit
                )    
            [permission] => Array
                (
                    [0] => add
                    [1] => edit
                )    
            [tool] => Array
                (
                    [0] => delete
                    [1] => remove
                )    
        )    
    [performance] => Array
        (
            [tool] => Array
                (
                    [0] => add
                    [1] => remove
                )    
        )    
)

如果您将字符串存储到一个数组中,那么您可以像下面这样做

<?php 

$string = [
    "operation.user.add",
    "operation.user.edit",
    "operation.permission.add",
    "performance.tool.add",
    "performance.tool.remove",
    "operation.permission.edit",
    "operation.tool.delete",
    "operation.tool.remove",
];

$result = [];
for( $i = 0; $i < count( $string ); $i++ ) {
    $parts = explode( '.', $string[$i] );
    $result[$parts[0]][$parts[1]][] = $parts[2];

}
echo '<pre>';
print_r($result);
echo '</pre>';

谢谢Nick的回答。

这只是一个字符串解析器。你们有并没有试着自己做点什么?我试过foreach循环,如果条件,但想做的是有效的方法是一个字符串还是一个字符串数组?并没有来自数据库的不同字符串。我正在使用3级组的权限。谢谢您的快速回复。它的不同字符串不是单个字符串。让我试试这个解决方案,too@viralchampanery如果它是一个字符串数组(比如称为
$array
),只需将第一个
foreach
更改为
foreach($array as$string)
@viralchampanery如果对您有效,请将其标记为您的答案。要感谢某人的答案,只需接受即可(向上/向下投票按钮下方的复选标记)。看到了吗?我没有意识到这一点。谢谢您的指导@Nick
Array
(
    [operation] => Array
        (
            [user] => Array
                (
                    [0] => add
                    [1] => edit
                )

            [permission] => Array
                (
                    [0] => add
                    [1] => edit
                )

            [tool] => Array
                (
                    [0] => delete
                    [1] => remove
                )

        )

    [performance] => Array
        (
            [tool] => Array
                (
                    [0] => add
                    [1] => remove
                )

        )

)
$str = 'operation.user.add
operation.user.edit
operation.permission.add
performance.tool.add
performance.tool.remove
operation.permission.edit
operation.tool.delete
operation.tool.remove';
$output = [];
foreach (explode("\n", $str) as $string) {
    $parts = explode('.', $string);
    $output[$parts[0]][$parts[1]][] = $parts[2];
}
print_r($output);