Я хочу преобразовать большой файл yaml в массив PHP исходный код. Я могу читать код yaml и возвращать массив PHP, но с var_dump ($ array) я получаю псевдокод в качестве вывода. Я хотел бы напечатать массив как действительный php-код, поэтому я могу скопировать его в мой проект и вырезать yaml.
Напечатать массив как код
Ответ 1
Вы ищете var_export
.
Ответ 2
Вы можете использовать var_export, serialize (с unserialize на конце резервирования) или даже json_encode (и использовать json_decode на принимающей стороне). У последнего есть преимущество в выпуске, который может обрабатываться любым, что может обрабатывать JSON.
Ответ 3
Не знаю, почему, но я не мог найти удовлетворяющий код где-нибудь.
Быстро это написал. Дайте мне знать, если вы найдете какие-либо ошибки.
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();
Надеюсь, это поможет кому-то.
Ответ 4
Другой способ отобразить массив в виде кода с отступом.
Протестировано только с массивом, который содержит строку, целое число и массив.
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.=' ';
}
for($i=1; $i<$deep; $i++){
$indent_close.=' ';
}
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.']';
}