开发者

print an array as code

开发者 https://www.devze.com 2023-02-14 08:01 出处:网络
I want to convert a big yaml file to PHP array source code. I can read in the yaml c开发者_StackOverflow社区ode and get back a PHP array, but with var_dump($array) I get pseudo code as output. I would

I want to convert a big yaml file to PHP array source code. I can read in the yaml c开发者_StackOverflow社区ode and get back a PHP array, but with var_dump($array) I get pseudo code as output. I would like to print the array as valid php code, so I can copy paste it in my project and ditch the yaml.


You're looking for var_export.


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.


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.


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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号