web-dev-qa-db-ja.com

コードとして配列を出力する

大きなyamlファイルをPHP array source codeに変換したい。yamlコードを読み取って、PHP =配列ですが、var_dump($ array)を使用して出力として疑似コードを取得します。配列を有効なphpコードとして印刷したいので、プロジェクトにコピーして貼り付け、yamlを破棄します。

56
Ward Bekker

あなたが探しています - var_export

107
deceze

var_exportserialize (予約側でunserializeを使用)、または json_encode (および受信側でjson_decodeを使用)を使用することもできます。最後のものは、JSONを処理できるものなら何でも処理できる出力を生成するという利点があります。

3
GordonM

理由はわかりませんが、満足のいくコードがどこにも見つかりませんでした。

すぐにこれを書いた。エラーが見つかった場合はお知らせください。

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

これが誰かを助けることを願っています。

2
Dieter Gribnitz

配列をインデント付きのコードとして表示する別の方法。

文字列、整数、配列を含む配列でのみテストされています。


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