我有以下代码用于将字符串解析为选项数组:
$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;
}
基本上它用逗号分隔,除非用括号括起来。然后它检查 = 键-> 值对,然后尝试确定该值是否是一个数组。
这工作正常,但我想改进它,以便它可以为类似的东西创建嵌套数组
$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
)
)
我当然不是 RegExp 大师,所以有人可以帮我让函数理解嵌套的 [] 分隔符吗?此外,任何可以提高功能性能的东西都受到高度赞赏,因为我经常使用它来轻松地将选项传递给我的控制器。