print an array as code

前端 未结 4 1568
时光取名叫无心
时光取名叫无心 2020-12-05 09:28

I want to convert a big yaml file to PHP array source code. I can read in the yaml code and get back a PHP array, but with var_dump($array) I get pseudo cod

相关标签:
4条回答
  • 2020-12-05 09:29

    You're looking for var_export.

    0 讨论(0)
  • 2020-12-05 09:47

    Don't know why but I could not find satisfying code anywhere.

    Quickly wrote this. Let me know if you find any errors.

      function printCode($array, $path=false, $top=true) {
        $data = "";
        $delimiter = "~~|~~";
        $p = null;
        if(is_array($array)){
          foreach($array as $key => $a){
            if(!is_array($a) || empty($a)){
              if(is_array($a)){
                $data .= $path."['{$key}'] = array();".$delimiter;
              } else {
                $data .= $path."['{$key}'] = \"".htmlentities(addslashes($a))."\";".$delimiter;
              }
            } else {
              $data .= printCode($a, $path."['{$key}']", false);
            }    
          }
        }
    
        if($top){
          $return = "";
          foreach(explode($delimiter, $data) as $value){
            if(!empty($value)){
              $return .= '$array'.$value."<br>";
            }
          };
          return $return;
        }
    
        return $data;
      }
    
      //REQUEST
      $x = array('key'=>'value', 'key2'=>array('key3'=>'value2', 'key4'=>'value3', 'key5'=>array()));
      echo printCode($x);
    
      //OUTPUT
      $array['key'] = 'value';
      $array['key2']['key3'] = 'value2';
      $array['key2']['key4'] = 'value3';
      $array['key2']['key5'] = array();
    

    Hope this helps someone.

    0 讨论(0)
  • 2020-12-05 09:48

    You could use var_export, serialize (with unserialize on the reserving end), or even json_encode (and use json_decode on the receiving end). The last one has the advantage of producing output that can be processed by anything that can handle JSON.

    0 讨论(0)
  • 2020-12-05 09:50

    An other way to display array as code with indentation.

    Tested only with an array who contain string, integer and array.

    
    function bo_print_nice_array($array){
        echo '$array=';
        bo_print_nice_array_content($array, 1);
        echo ';';
    }
    function bo_print_nice_array_content($array, $deep=1){
        $indent = '';
        $indent_close = '';
        echo "[";
        for($i=0; $i<$deep; $i++){
            $indent.='&nbsp;&nbsp;&nbsp;&nbsp;';
        }
        for($i=1; $i<$deep; $i++){
            $indent_close.='&nbsp;&nbsp;&nbsp;&nbsp;';
        }
        foreach($array as $key=>$value){
            echo "<br>".$indent;
            echo '"'.$key.'" => ';
            if(is_string($value)){
                echo '"'.$value.'"';
            }elseif(is_array($value)){
                bo_print_nice_array_content($value, ($deep+1));
            }else{
                echo $value;
            }
            echo ',';
        }
        echo '<br>'.$indent_close.']';
    }
    
    
    0 讨论(0)
提交回复
热议问题