2011-02-28 20 views
46

Quiero convertir un archivo grande yaml a PHP matriz código fuente. Puedo leer el código yam y recuperar una matriz PHP, pero con var_dump ($ array) obtengo un pseudo código como salida. Me gustaría imprimir la matriz como código php válido, así que puedo copiar y pegarlo en mi proyecto y abandonar el yaml.imprimir una matriz como código

+0

Por curiosidad, ¿por qué querrías abandonar el yall? Es un formato fantástico que usted y otros pueden editar a mano. :-) – Benson

+0

Analizar un archivo YAML en cada solicitud es relativamente lento si lo compara con 'incluir' una matriz php. En mi proyecto actual, la velocidad es más importante. –

Respuesta

89

Está buscando var_export.

+1

ie: '$ string_representation = var_export ($ complex_array, TRUE);' – ErichBSchulz

+1

Muchas gracias. – Iscariot

+0

¿hay alguna forma de var_export con [] en lugar de array()? – Oliboy50

3

Puede usar var_export, serialize (con unserialize en el extremo reservado), o incluso json_encode (y use json_decode en el extremo receptor). El último tiene la ventaja de producir resultados que pueden ser procesados ​​por cualquier cosa que pueda manejar JSON.

1

No sé por qué pero no pude encontrar el código satisfactorio en ninguna parte.

Lo escribió rápidamente. Avísame si encuentras algún error.

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

Espero que esto ayude a alguien.

Cuestiones relacionadas