Вы можете разбить строку на запятую, которая не заключена в [
и ]
, используя это регулярное выражение (навеянное этим ответом ) с помощью 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;");
Результат будет таким же.