PHP method to restore the data processed by print_r to the original array

黄舟
Release: 2023-03-05 19:18:02
Original
1369 people have browsed it


php The print_r method can print and display variables to make them easy to understand. If the variable is a string, integer or float, the variable value itself will be printed. If the variable is an array, the keys and elements will be displayed in a certain format. object is similar to an array. print_r is used to print large arrays.

PHP natively does not restore the data printed by the print_r method to the original array, so the following method was written to restore the data processed by print_r to the original array.

RestorePrint.class.php

<?php/**
 * 将print_r处理后的数据还原为原始数组
 * Date:    2016-10-31
 * Author:  fdipzone
 * Ver:     1.0
 */class RestorePrint{ // class start

    public $res = array();    
    protected $dict = array();    
    protected $buf = &#39;&#39;;    
    protected $keyname = &#39;&#39;;    
    protected $stack = array();    
    public function __construct() {
        $this->stack[] =& $this->res;
    }    public function __call($method, $param){
        echo $this->buf .&#39; not defined mehtod:&#39;.$method. &#39; param:&#39;.implode(&#39;,&#39;, $param);
    }    public function set($word, $value=&#39;&#39;){
        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[&#39;val&#39;] = $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 = &#39;&#39;;
            }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[&#39;val&#39;])){            
        $arr = explode(&#39;,&#39;, $p[&#39;val&#39;]);
            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 = &#39;&#39;;
    }    protected function brackets($c){
        $cnt = count($this->stack)-1;        
        switch($c){            
        case &#39;)&#39;:                
        if($this->keyname){                    
        $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                
                $this->keyname = &#39;&#39;;
                array_pop($this->stack);                
                break;            
                case &#39;[&#39;:                
                if($this->keyname){                    
                $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                break;            case &#39;]&#39;:                
                $this->keyname = $this->buf;                break;
        }        $this->buf = &#39;&#39;;
    }

} // class end?>
Copy after login



demo. php

<?phprequire &#39;RestorePrint.class.php&#39;;$print_r_data = <<<TXT
Array
(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
TXT;
// 显示打印的数据echo &#39;显示打印的数据<br>&#39;;
echo &#39;<pre class="brush:php;toolbar:false">&#39;.$print_r_data.&#39;
'; $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 '还原为数组
'; var_dump($result);?>
Copy after login



Output:

显示打印的数据Array(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
还原为数组
array (size=5)  
&#39;name&#39; => string &#39;fdipzone&#39; (length=8)  
&#39;gender&#39; => string &#39;male&#39; (length=4)  
&#39;age&#39; => string &#39;18&#39; (length=2) 
 &#39;profession&#39; => string &#39;programmer&#39; (length=10)  &#39;detail&#39; => 
    array (size=2)      
    &#39;grade&#39; => string &#39;1&#39; (length=1)      
    &#39;addtime&#39; => string &#39;2016-10-31&#39; (length=10)
Copy after login



Source code download address : Click to view

php The print_r method can print and display variables to make them easy to understand. If the variable is a string, integer or float, the variable value itself will be printed. If the variable is an array, the keys and elements will be displayed in a certain format. object is similar to an array. print_r is used to print large arrays.

php natively does not restore the data printed by the print_r method to the original array, so the following method was written to restore the data processed by print_r to the original array.

RestorePrint.class.php

<?php/**
 * 将print_r处理后的数据还原为原始数组
 * Date:    2016-10-31
 * Author:  fdipzone
 * Ver:     1.0
 */class RestorePrint{ // class start

    public $res = array();    
    protected $dict = array();    
    protected $buf = &#39;&#39;;    
    protected $keyname = &#39;&#39;;    
    protected $stack = array();    
    public function __construct() {
        $this->stack[] =& $this->res;
    }    public function __call($method, $param){
        echo $this->buf .&#39; not defined mehtod:&#39;.$method. &#39; param:&#39;.implode(&#39;,&#39;, $param);
    }    public function set($word, $value=&#39;&#39;){
        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[&#39;val&#39;] = $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 = &#39;&#39;;
            }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[&#39;val&#39;])){            
        $arr = explode(&#39;,&#39;, $p[&#39;val&#39;]);
            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 = &#39;&#39;;
    }    protected function brackets($c){
        $cnt = count($this->stack)-1;        
        switch($c){            
        case &#39;)&#39;:                
        if($this->keyname){                    
        $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                
                $this->keyname = &#39;&#39;;
                array_pop($this->stack);                
                break;            
                case &#39;[&#39;:                
                if($this->keyname){                    
                $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                
                break;            
                case &#39;]&#39;:                
                $this->keyname = $this->buf;                
                break;
        }        $this->buf = &#39;&#39;;
    }

} // class end?>
Copy after login



demo. php

<?phprequire &#39;RestorePrint.class.php&#39;;$print_r_data = <<<TXT
Array
(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
TXT;
// 显示打印的数据echo &#39;显示打印的数据<br>&#39;;
echo &#39;<pre class="brush:php;toolbar:false">&#39;.$print_r_data.&#39;
'; $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 '还原为数组
'; var_dump($result);?>
Copy after login



Output:

显示打印的数据Array(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
还原为数组array (size=5)  &#39;name&#39; => string &#39;fdipzone&#39; (length=8)  &#39;gender&#39; => string &#39;male&#39; (length=4)  &#39;age&#39; => string &#39;18&#39; (length=2)  
&#39;profession&#39; => string &#39;programmer&#39; (length=10)  &#39;detail&#39; => 
    array (size=2)      &#39;grade&#39; => string &#39;1&#39; (length=1)      &#39;addtime&#39; => string &#39;2016-10-31&#39; (length=10)
Copy after login



The above is the content. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!