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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。