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(''('','')''), json_encode($arr)), true);
$output = var_export($output, true);
$output = str_replace(array(''array ('','')'',''('','')''), 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
.