Home  >  Article  >  Backend Development  >  PHP method to restore the data processed by print_r to the original array

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

黄舟
黄舟Original
2017-02-17 09:57:521273browse


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

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

 fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
TXT;
// 显示打印的数据echo '显示打印的数据
'; echo '
'.$print_r_data.'
'; $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);?>



Output:

显示打印的数据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)



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

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

 fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
TXT;
// 显示打印的数据echo '显示打印的数据
'; echo '
'.$print_r_data.'
'; $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);?>



Output:

显示打印的数据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)



The above is the content. For more related content, please pay attention to the PHP Chinese website (m.sbmmt.com)!


Statement:
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