php不用eval实现字符串转数组
2017-07-01 16:07
239 查看
在一些项目中,我们经常需要将下面这种字符串转化为数组
array(array('name'=>'Home','single'=>'0','modelid'=>'11'))
这时候,可以直接用eval来解决,可是一旦这段字符串出现错误,eval会导致程序停止运行。
针对这个问题,我最近写了一个方法,初步实现了String转Array的功能,代码如下
array(array('name'=>'Home','single'=>'0','modelid'=>'11'))
这时候,可以直接用eval来解决,可是一旦这段字符串出现错误,eval会导致程序停止运行。
针对这个问题,我最近写了一个方法,初步实现了String转Array的功能,代码如下
<?php /** * @param String $string * @return array|bool * 字符串转数组,用以替换eval(),支持多维索引,键值对数组 * 数组格式错误返回布尔false,成功解析返回数组 * by Bob Wang 2017-05-18 */ function array_encode($string){ //删除空格 $string=str_replace(' ','',$string); //容错空数组 if($string=='array()'){ return array(); } //数组格式容错 if(substr($string,0,6)=='array('&&$string[strlen($string)-1]==')'){ $Array=array(); $array=substr($string,6,strlen($string)-7); //容错,不要分隔小数组中的逗号 if(strpos($array,'array(')===0){ $array=str_replace(",array",",#array",$array); $array=explode(',#',$array); }else{ $array=explode(',',$array); } if(strpos($array[0],'array(')===0){ //小数组 foreach($array as $key => &$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; } }
相关文章推荐
- 改写函数实现PHP二维/三维数组转字符串
- PHP数组和字符串互相转换实现方法
- PHP 数组和字符串互相转换实现方法
- php实现将二维关联数组转换成字符串的方法详解
- php中通过eval实现字符串格式的计算公式
- 整型数组处理算法(十四)不用库函数,用C语言实现将一整型数转换成字符串
- PHP 数组和字符串互相转换实现方法
- PHP 数组和字符串互相转换实现方法
- PHP 数组和字符串互相转换实现方法
- PHP 数组和字符串互相转换实现方法
- PHP 中替换若干字符串字串为数组中的值,不用循环,非常高效
- PHP实现多维数组转字符串和多维数组转一维数组的方法
- php实现根据字符串生成对应数组的方法
- php开发笔记(七)用数组函数实现生成随机字符串
- PHP 数组和字符串互相转换实现方法
- php通过数组实现多条件查询实现方法(字符串分割)
- jquery 多维数组实现PHP的count、in_array(不区分大小写),utf8字符串(包含中文,中文字符2个字节)字节统计
- php中循环实现(字符串,对象,或者数组)编码相互转换
- php str_getcsv把字符串解析为数组的实现方法
- php 实现不用递归的树形数组构造函数 无限级分类