2009-03-26 20 views
8

tengo una matriz:Convertir PHP cadena de matriz en una matriz

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 

lo guardo como una variable:

$fileContents = var_dump($myArray); 

¿Cómo se puede convertir la variable de volver a utilizar como un vector normal?

echo $fileContents[0]; //output: value1 
echo $fileContents[1]; //output: value2 
+0

Si utiliza 'print_r' en lugar de' var_dump', puede utilizar [función inversa print_r] (http://www.php.net/ manual/es/function.print-r.php # 93529). – machineaddict

Respuesta

19

Creo que es posible que desee ver en serialize y unserialize.

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$serialized = serialize($myArray); 
$myNewArray = unserialize($serialized); 
print_r($myNewArray); // Array ([key1] => value1 [key2] => value2) 
+2

Pero no es una respuesta para la pregunta. – marines

+0

@marines: ¿no es así? –

+2

Su solución no cubre la reversión de la salida var_dump() a la matriz (esta era la pregunta). Es solo otra forma de lograr serializar y deserializar una matriz. – marines

7

Trate de usar var_export para generar sintaxis de PHP válida, escribir que en un archivo y luego 'incluyen' el archivo:

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$fileContents = '<?php $myArray = '.var_export($myArray, true).'; ?>'; 

// ... after writing $fileContents to 'myFile.php' 

include 'myFile.php'; 
echo $myArray['key1']; // Output: value1 
+0

¡Esto me hizo muy feliz! ¡Gracias! –

+0

Todos deben olvidarse de usar $ myArray como fuente para cualquier ejemplo aquí. El OP dijo claramente que quiere comenzar con un botín, no con la matriz real. Él tiene una cadena con el volcado, no la matriz. Él no quiere generar la cadena. – sergio

18

serializar podría ser la respuesta correcta - pero yo prefiero usar JSON - edición humana de los datos será posible de esa manera ...

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$serialized = json_encode($myArray); 
$myNewArray = json_decode($serialized); 
print_r($myNewArray); // Array ([key1] => value1 [key2] => value2) 
+1

+1, no sé por qué no pensé al principio. Esto es lo que personalmente uso también. –

+5

+1 para el uso de JSON. Nota: la función json_decode() necesita que el 2º parámetro sea "verdadero" para devolver una matriz asociativa. (O devolverá un objeto "stdClass") –

2

¿Qué hay de eval? También debe usar var_export con la variable de retorno como verdadera en lugar de var_dump.

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$fileContents = var_export($myArray, true); 
eval("\$fileContentsArr = $fileContents;"); 
echo $fileContentsArr['key1']; //output: value1 
echo $fileContentsArr['key2']; //output: value2 
+0

Otro ejemplo que usa $ myArray cuando el OP indica que quiere usar el var_dump() del mismo. NO la matriz. En lo que nos concierne, la matriz ya se habrá ido y solo nos la menciona para que sepamos de qué era el vertedero. – sergio

1
$array = ['10', "[1,2,3]", "[1,['4','5','6'],3]"]; 

function flat($array, &$return) { 
    if (is_array($array)) { 
     array_walk_recursive($array, function($a) use (&$return) { flat($a, $return); }); 
    } else if (is_string($array) && stripos($array, '[') !== false) { 
     $array = explode(',', trim($array, "[]")); 
     flat($array, $return); 
    } else { 
     $return[] = $array; 
    } 
} 

$return = array(); 

flat($array, $return); 

print_r($return); 

SALIDA

 
Array ([0] => 10 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => '4' [6] => '5' [7] => '6'] [8] => 3) 
Cuestiones relacionadas