2011-02-28 95 views
46

我想将一个大的yaml文件转换为PHP数组源代码。我可以读取yaml代码并获取一个PHP数组,但使用var_dump($ array),我得到伪代码作为输出。我想打印这个数组作为有效的PHP代码,所以我可以将它粘贴到我的项目中,然后放弃yaml。打印阵列为代码

+0

出于好奇,你为什么想要沟渠yaml?这是一个非常棒的格式,您和其他人可以手动编辑。 :-) – Benson 2011-02-28 10:44:34

+0

如果将它与'包含'一个php数组进行比较,那么在每个请求上解析YAML文件相对较慢。在我目前的项目中,速度更重要。 – 2011-02-28 11:07:54

回答

89

您正在查找var_export

+1

ie:'$ string_representation = var_export($ complex_array,TRUE);' – ErichBSchulz 2013-09-21 00:13:06

+1

非常感谢。 – Iscariot 2015-10-27 23:25:26

+0

有没有一种方法来var [参数]而不是array()? – Oliboy50 2016-10-19 10:08:57

3

您可以使用var_export,serialize(在预订端有反序列化),或者甚至使用json_encode(并在接收端使用json_decode)。最后一个产生的输出可以被任何可以处理JSON的东西处理。

1

不知道为什么,但我无法在任何地方找到令人满意的代码。

快速写下这个。让我知道如果你发现任何错误。

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(); 

希望这可以帮助别人。