print an array as code

PhpYaml

Php Problem Overview


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 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.

Php Solutions


Solution 1 - Php

You're looking for var_export.

Solution 2 - Php

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.

Solution 3 - Php

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.

Solution 4 - Php

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.']';
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWard BekkerView Question on Stackoverflow
Solution 1 - PhpdecezeView Answer on Stackoverflow
Solution 2 - PhpGordonMView Answer on Stackoverflow
Solution 3 - PhpDieter GribnitzView Answer on Stackoverflow
Solution 4 - PhpZecKaView Answer on Stackoverflow