php将print_r处理后的数据还原为原始数组的解决方法
PHPprint_r方法可以把变量打印显示,使变量易于理解。如果变量是string,integer或float,将打印变量值本身,如果变量是array,将会按照一定格式显示键和元素。object与数组类似。print_r用于打印数组较多。
php原生没有把print_r方法打印后的数据还原为原始数组,因此写了下面这个方法,实现将print_r处理后的数据还原为原始数组。
RestorePrint.class.php
<?php
/**
*将print_r处理后的数据还原为原始数组
*Date:2016-10-31
*Author:fdipzone
*Ver:1.0
*/
classRestorePrint{//classstart
public$res=array();
protected$dict=array();
protected$buf='';
protected$keyname='';
protected$stack=array();
publicfunction__construct(){
$this->stack[]=&$this->res;
}
publicfunction__call($method,$param){
echo$this->buf.'notdefinedmehtod:'.$method.'param:'.implode(',',$param);
}
publicfunctionset($word,$value=''){
if(is_array($word)){
foreach($wordas$k=>$v){
$this->set($k,$v);
}
}
$p=&$this->dict;
foreach(str_split($word)as$ch){
if(!isset($p[$ch])){
$p[$ch]=array();
}
$p=&$p[$ch];
}
$p['val']=$value;
return$this;
}
publicfunctionparse($str){
$this->doc=$str;
$this->len=strlen($str);
$i=0;
while($i<$this->len){
$t=$this->find($this->dict,$i);
if($t){
$i=$t;
$this->buf='';
}else{
$this->buf.=$this->doc{$i++};
}
}
}
protectedfunctionfind(&$p,$i){
if($i>=$this->len){
return$i;
}
$t=0;
$n=$this->doc{$i};
if(isset($p[$n])){
$t=$this->find($p[$n],$i+1);
}
if($t){
return$t;
}
if(isset($p['val'])){
$arr=explode(',',$p['val']);
call_user_func_array(array($this,array_shift($arr)),$arr);
return$i;
}
return$t;
}
protectedfunctiongroup(){
if(!$this->keyname){
return;
}
$cnt=count($this->stack)-1;
$this->stack[$cnt][$this->keyname]=array();
$this->stack[]=&$this->stack[$cnt][$this->keyname];
$this->keyname='';
}
protectedfunctionbrackets($c){
$cnt=count($this->stack)-1;
switch($c){
case')':
if($this->keyname){
$this->stack[$cnt][$this->keyname]=trim($this->buf);
}
$this->keyname='';
array_pop($this->stack);
break;
case'[':
if($this->keyname){
$this->stack[$cnt][$this->keyname]=trim($this->buf);
}
break;
case']':
$this->keyname=$this->buf;
break;
}
$this->buf='';
}
}//classend
?>
demo.php
<?php
require'RestorePrint.class.php';
$print_r_data=<<<TXT
Array
(
[name]=>fdipzone
[gender]=>male
[age]=>18
[profession]=>programmer
[detail]=>Array(
[grade]=>1
[addtime]=>2016-10-31
)
)
TXT;
//显示打印的数据
echo'显示打印的数据<br>';
echo'<pre>'.$print_r_data.'</pre>';
$oRestorePrint=newRestorePrint;
$oRestorePrint->set('Array','group');
$oRestorePrint->set('[','brackets,[');
$oRestorePrint->set(']=>','brackets,]');
$oRestorePrint->set(')','brackets,)');
$oRestorePrint->parse($print_r_data);
$result=$oRestorePrint->res;
echo'还原为数组<br>';
var_dump($result);
?>
输出:
显示打印的数据
Array
(
[name]=>fdipzone
[gender]=>male
[age]=>18
[profession]=>programmer
[detail]=>Array(
[grade]=>1
[addtime]=>2016-10-31
)
)
还原为数组
array(size=5)
'name'=>string'fdipzone'(length=8)
'gender'=>string'male'(length=4)
'age'=>string'18'(length=2)
'profession'=>string'programmer'(length=10)
'detail'=>
array(size=2)
'grade'=>string'1'(length=1)
'addtime'=>string'2016-10-31'(length=10)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短