Welcome

首页 / 网页编程 / PHP / php将print_r处理后的数据还原为原始数组的解决方法

PHP print_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 */class RestorePrint{ // class startpublic $res = array();protected $dict = array();protected $buf = "";protected $keyname = "";protected $stack = array();public function __construct() {$this->stack[] =& $this->res;}public function __call($method, $param){echo $this->buf ." not defined mehtod:".$method. " param:".implode(",", $param);}public function set($word, $value=""){if(is_array($word)){foreach($word as $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;}public function parse($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++};}}}protected function find(&$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;}protected function group(){if(!$this->keyname){return ;}$cnt = count($this->stack)-1;$this->stack[$cnt][$this->keyname] = array();$this->stack[] =& $this->stack[$cnt][$this->keyname];$this->keyname = "";}protected function brackets($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 = "";}} // class end?>
demo.php
<?phprequire "RestorePrint.class.php";$print_r_data = <<<TXTArray([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 = new RestorePrint;$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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。