2011-02-28 130 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(); 

希望這可以幫助別人。