你好:)我是一个PHP初学者。我试了几次,但没有成功我想解析一个字符串如下:[1,[01,11,12],[20,21,22]]到
[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 `
xn1cxnb41#
你可以使用这个正则表达式(受这个答案的启发)和preg_split来分割你的字符串,这个正则表达式不是用[和]括起来的逗号:
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
eval("\$output = $string;");
结果都是一样的。
fhg3lkii2#
假设你的样本数据的01是错别字,应该是10,那么你的输入是有效的json。在这种情况下,你只需要解码json,然后无条件地将每个元素转换为数组。代码:(Demo)
01
10
$json = '[1,[10,11,12],[20,21,22]]'; var_export( array_map( fn($v) => (array) $v, json_decode($json) ) );
用正则表达式解析一个有效的json字符串通常是一个坏主意。更危险的是PHP的eval()--它可能使您的应用程序暴露于已知的漏洞。
eval()
2条答案
按热度按时间xn1cxnb41#
你可以使用这个正则表达式(受这个答案的启发)和
preg_split
来分割你的字符串,这个正则表达式不是用[
和]
括起来的逗号:然后从结果部分中修剪周围的
[
和]
,并将逗号上的这些字符串分割成输出数组的后续元素。举例来说:输出量:
Demo on 3v4l.org
如果你100%确定字符串的来源和安全性,你也可以使用
eval
:结果都是一样的。
fhg3lkii2#
假设你的样本数据的
01
是错别字,应该是10
,那么你的输入是有效的json。在这种情况下,你只需要解码json,然后无条件地将每个元素转换为数组。
代码:(Demo)
用正则表达式解析一个有效的json字符串通常是一个坏主意。更危险的是PHP的
eval()
--它可能使您的应用程序暴露于已知的漏洞。