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

q5lcpyga  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(90)

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

xn1cxnb41#

你可以使用这个正则表达式(受这个答案的启发)和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
        )
)

Demo on 3v4l.org
如果你100%确定字符串的来源和安全性,你也可以使用eval

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

结果都是一样的。

fhg3lkii

fhg3lkii2#

假设你的样本数据的01是错别字,应该是10,那么你的输入是有效的json。
在这种情况下,你只需要解码json,然后无条件地将每个元素转换为数组。
代码:(Demo

$json = '[1,[10,11,12],[20,21,22]]';
var_export(
    array_map(
        fn($v) => (array) $v,
        json_decode($json)
    )
);

用正则表达式解析一个有效的json字符串通常是一个坏主意。更危险的是PHP的eval()--它可能使您的应用程序暴露于已知的漏洞。

相关问题