web-dev-qa-db-fra.com

imprimer un tableau sous forme de code

Je veux convertir un gros fichier yaml en PHP array code source. Je peux lire le code yaml et récupérer un PHP = array, mais avec var_dump ($ array) j'obtiens un pseudo code en sortie. Je voudrais imprimer le tableau comme code php valide, donc je peux le copier coller dans mon projet et abandonner le yaml.

56
Ward Bekker

Vous cherchez var_export .

107
deceze

Vous pouvez utiliser var_export , serialize (avec désérialisation à l'extrémité réservante), ou même json_encode (et utiliser json_decode à l'extrémité réceptrice). Le dernier a l'avantage de produire une sortie qui peut être traitée par tout ce qui peut gérer JSON.

3
GordonM

Je ne sais pas pourquoi mais je n'ai pu trouver de code satisfaisant nulle part.

A rapidement écrit cela. Faites-moi savoir si vous trouvez des erreurs.

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

J'espère que cela aide quelqu'un.

2
Dieter Gribnitz

Une autre façon d'afficher un tableau sous forme de code avec indentation.

Testé uniquement avec un tableau contenant une chaîne, un entier et un tableau.


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
Robin ZecKa Ferrari