variable var_export var_dump manejo imprimir ejemplos consola arreglos array php arrays php-5.4

var_dump - Cómo formatear var_export a php5.4 array syntax



var_dump php (4)

Hay muchas preguntas y respuestas sobre el tema de la sintaxis php válida de las salidas var. Lo que estoy buscando es una forma rápida y limpia de obtener la salida de var_export para usar una sintaxis de matriz php5.4 válida.

Dado

$arr = [ ''key'' => ''value'', ''mushroom'' => [ ''badger'' => 1 ] ]; var_export($arr);

salidas

array ( ''key'' => ''value'', ''mushroom'' => array ( ''badger'' => 1, ), )

¿Hay alguna manera rápida y fácil de hacer que genere la matriz como se define, usando la sintaxis de corchete?

[ ''key'' => ''value'', ''mushroom'' => [ ''badger'' => 1 ] ]

¿El consenso general es utilizar el análisis de expresiones regulares? Si es así, ¿alguien ha encontrado una expresión regular decente? Los contenidos de nivel de valor de los arreglos que usaré serán todos scalar y array , no objetos o clases.


Como han señalado los comentarios, esta es solo una sintaxis adicional. Para obtener la var_export nuevo al estilo de corchete, str_replace funciona bien si no hay ) en la clave o el valor. Todavía es sencillo, aunque se usa JSON como intermedio:

$output = json_decode(str_replace(array(''('','')''), array(''&#40'',''&#41''), json_encode($arr)), true); $output = var_export($output, true); $output = str_replace(array(''array ('','')'',''&#40'',''&#41''), array(''['','']'',''('','')''), $output);

Utilicé las entidades HTML para ( y ) . Puedes usar la secuencia de escape o lo que sea.


Con https://github.com/zendframework/zend-code :

<?php use Zend/Code/Generator/ValueGenerator; $generator = new ValueGenerator($myArray, ValueGenerator::TYPE_ARRAY_SHORT); $generator->setIndentation('' ''); // 2 spaces echo $generator->generate();


Me doy cuenta de que esta pregunta es antigua; Pero la búsqueda me lleva aquí. No me interesaban las iteraciones completas ni el uso de json_decode , así que aquí hay un var_export twister basado en preg_replace que hace el trabajo.

function var_export_short($data, $return=true) { $dump = var_export($data, true); $dump = preg_replace(''#(?:/A|/n)([ ]*)array /(#i'', ''['', $dump); // Starts $dump = preg_replace(''#/n([ ]*)/),#'', "/n$1],", $dump); // Ends $dump = preg_replace(''#=> /[/n/s+/],/n#'', "=> [],/n", $dump); // Empties if (gettype($data) == ''object'') { // Deal with object states $dump = str_replace(''__set_state(array('', ''__set_state(['', $dump); $dump = preg_replace(''#/)/)$#'', "])", $dump); } else { $dump = preg_replace(''#/)$#'', "]", $dump); } if ($return===true) { return $dump; } else { echo $dump; } }

Lo he probado en varios arrays y objetos. No exhaustivamente por ninguna medida, pero parece estar funcionando bien. Hice la salida "ajustada" al compactar también saltos de línea adicionales y arreglos vacíos. Si se encuentra con algún daño de datos inadvertido al usar esto, hágamelo saber. Todavía no he evaluado esto comparativamente con las soluciones anteriores, pero sospecho que será mucho más rápido. Disfruta leyendo tus arreglos!


Tuve algo similar por ahí.

function var_export54($var, $indent="") { switch (gettype($var)) { case "string": return ''"'' . addcslashes($var, "///$/"/r/n/t/v/f") . ''"''; case "array": $indexed = array_keys($var) === range(0, count($var) - 1); $r = []; foreach ($var as $key => $value) { $r[] = "$indent " . ($indexed ? "" : var_export54($key) . " => ") . var_export54($value, "$indent "); } return "[/n" . implode(",/n", $r) . "/n" . $indent . "]"; case "boolean": return $var ? "TRUE" : "FALSE"; default: return var_export($var, TRUE); } }

No es demasiado bonito, pero tal vez sea suficiente para su caso.

Cualquiera, pero los tipos especificados son manejados por el var_export regular. Por lo tanto, para cadenas de una sola cita, simplemente comente el caso de la string .