在一些项目中,我们经常需要将下面这种字符串转化为数组
array(array('name'=>'Home','single'=>'0','modelid'=>'11'))
这时候,可以直接用eval来解决,可是一旦这段字符串出现错误,eval会导致程序停止运行。
针对这个问题,我最近写了一个方法,初步实现了String转Array的功能,代码如下
&$value){
$Array[]=array_encode($value);
}
}elseif(strpos($array[0],'=>')){
//键值对数组
foreach($array as $key => &$value){
//容错,不要分隔小数组中的键值符号
if(strpos($value,'array(')>0){
$value=str_replace("=>array","=>#array",$value);
$value=explode('=>#',$value);
}else{
$value=explode('=>',$value);
}
if(!(strpos($value[1],'\'')===0||strpos($value[1],'"')===0||strpos($value[1],'array')===0)){
if(strpos($value[1],'.')>0){
//双精度
$Array[preg_replace("/'|\"/","",$value[0])]=(double)$value[1];
}else{
//整形
$Array[preg_replace("/'|\"/","",$value[0])]=(int)$value[1];
}
}elseif(strpos($value[1],'array')===0){
//小数组
$Array[preg_replace("/'|\"/","",$value[0])]=array_encode($value[1]);
}else{
//字符串
$Array[preg_replace("/'|\"/","",$value[0])]=preg_replace("/'|\"/","",$value[1]);
}
}
}else{
//索引数组
foreach($array as $key =>&$value){
if(!(strpos($value,'\'')===0||strpos($value,'"')===0||strpos($value,'array')===0)){
if(strpos($value,'.')>0){
//双精度
$Array[]=(double)$value;
}else{
//整形
$Array[]=(int)$value;
}
}elseif(strpos($value,'array')===0){
//小数组
$Array[]=array_encode($value);
}else{
//字符串
$Array[]=preg_replace("/'|\"/","",$value);
}
}
}
return $Array;
}else{
return false;
}
}