我有以下代码解析字符串转换成一组选项:PHP:使用嵌套数组解析字符串到数组中?
$options = 'myvalue, test=123, myarray=[1,2]';
function parse_options($options)
{
$split = '/,(?=[^\]]*(?:\[|$))/';
if($options && is_string($options))
{
$temp_options = preg_split($split, $options);
$options = array();
foreach($temp_options as $option)
{
$option = trim($option);
if(strpos($option,'='))
{
//Is an option with a value
list($key, $value) = explode('=',$option);
if(strpos($value,'[') !== FALSE)
{
//Is an array of values
$value = explode(',', substr($value, 1,-1));
}
$options[$key] = $value;
}
else
{
$options[] = $option;
}
}
}
else
{
//Return empty array if not a string or is false
if(!is_array($options)) { $options = array(); }
}
return $options;
}
基本上它拆分通过逗号除非由括号包围。然后它检查key-> value对的值,然后尝试确定该值是否为数组。
这工作得很好,但我想改善它,以便它可以创建一些嵌套数组一样
$options = 'myvalue, test=123, bigwhopper=[ myarray=[1,2], test2=something ]';
这将输出
Array(
[0] => myvalue,
[test] => 123,
[bigwhopper] => Array(
[myarray] = Array(
[0] => 1,
[1] => 2
),
[test] => something
)
)
我当然没有正则表达式大师所以有人可以帮助我使功能理解嵌套[]分隔符?还有任何提高功能性能的东西都是非常值得欣赏的,因为我使用了很多功能来轻松地将选项传递给我的控制器。
这尖叫递归。 – nickb 2012-07-11 12:33:17
嗯,你正在尝试编写一个自定义的非串行化程序,它不是一件容易的事情。为什么你需要解析这样的结果? – 2012-07-11 12:33:21