PHP Разнесение строки между двумя символами в массивы? (Нубский вопрос) - PullRequest
0 голосов
/ 03 ноября 2019

Привет :) Я новичок в PHP. Я пробовал несколько раз, но безуспешно

Я хотел бы проанализировать строку типа: [1,[01,11,12],[20,21,22]] до

`
arr[0][0]=>1
arr[1][0]=>01
arr[1][1]=>11
arr[1][2]=>12
arr[2][0]=>20
arr[2][1]=>21
arr[2][2]=>22
`

1 Ответ

0 голосов
/ 03 ноября 2019

Вы можете разбить строку на запятую, которая не заключена в [ и ], используя это регулярное выражение (навеянное этим ответом ) с помощью preg_split:

,(?![^\[]*\])

, а затем обрезать окружающие [ и ] из результирующих частей и разбить эти строки на запятые на последующие элементы выходного массива. Например:

$string = '[1,[01,11,12] ,4 ,5, [20,21,22]]';
$parts = preg_split('/,(?![^\[]*\])/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
$output = array();
foreach ($parts as $part) {
    $part = trim($part, '[] ');
    $output[] = explode(',', $part);
}
print_r($output);

Вывод:

Array
(
    [0] => Array
        (
            [0] => 1
        )
    [1] => Array
        (
            [0] => 01
            [1] => 11
            [2] => 12
        )
    [2] => Array
        (
            [0] => 4
        )
    [3] => Array
        (
            [0] => 5
        )
    [4] => Array
        (
            [0] => 20
            [1] => 21
            [2] => 22
        )
)

Демонстрация на 3v4l.org

Если вы уверены 100% источника и безопасность строки, вы также можете просто использовать eval:

eval("\$output = $string;");

Результат будет таким же.

...