PHP преобразовать строку в массив для группы? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть группа в строке, которую я хочу разбить по группам и подгруппам

Например,

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

МожетКто-нибудь дать решение, как я могу преобразовать строку в массив, как указано выше массива?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Если вы храните свои строки в массиве, вы можете сделать это, как показано ниже

<code><?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 '
';

Вывод:

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
                )

        )

)
0 голосов
/ 03 октября 2018
$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);

Спасибо Ник за ваш ответ.

0 голосов
/ 02 октября 2018

Предполагая, что это одно строковое значение, это, вероятно, настолько эффективно, насколько вы можете получить:

$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
                )    
        )    
)
...