PHP 将两个字符之间的字符串分解为数组? (菜鸟问题)

PHP Explode string between two characters to arrays? (Noob question)

你好:) 我是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
`

您可以使用此正则表达式在 [] 未包含的逗号上拆分字符串(灵感来自 this answer) with preg_split:

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

然后 trim 从结果部分围绕 [] 并将逗号上的这些字符串拆分为输出数组的后续元素。例如:

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

Demo on 3v4l.org

如果您 100% 确定 字符串的来源和安全性,您也可以只使用 eval:

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

结果是一样的。