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
)
)
如果您 100% 确定 字符串的来源和安全性,您也可以只使用 eval
:
eval("$output = $string;");
结果是一样的。
你好:) 我是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
)
)
如果您 100% 确定 字符串的来源和安全性,您也可以只使用 eval
:
eval("$output = $string;");
结果是一样的。