2009-03-26 12 views
8

Ho un array:Convertire PHP stringa di array in un array

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

risparmio come una variabile:

$fileContents = var_dump($myArray); 

Come può convertire la variabile di nuovo da utilizzare come una serie regolare?

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

Se si utilizza 'print_r' invece di' var_dump', è possibile usare [print_r funzione inversa] (http://www.php.net/ manuale/it/function.print-r.php # 93529). – machineaddict

risposta

19

Penso che si potrebbe desiderare di guardare in serialize e unserialize.

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

Ma non è una risposta alla domanda. – marines

+0

@marines: non lo è? –

+2

La tua soluzione non copre il ritorno dell'output var_dump() all'array (questa era la domanda). È solo un altro modo per realizzare serializzazione e unserializzazione di un array. – marines

7

Provare a utilizzare var_export per generare la sintassi di PHP valido, scrivere che in un file e poi 'include' il file:

$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

Questo mi ha reso molto molto felice! Grazie! –

+0

Tutti dovrebbero dimenticarsi di utilizzare $ myArray come sorgente per qualsiasi esempio qui. L'OP ha chiaramente detto che vuole iniziare da una discarica di esso, non dall'array vero e proprio. Ha una stringa con il dump, non l'array. Non vuole generare la stringa. – sergio

18

serializzare potrebbe essere la risposta giusta - ma io preferisco usare JSON - editing umana dei dati sarà possibile in questo modo ...

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

+1, non so perché inizialmente non ci ho pensato. Questo è quello che uso anch'io personalmente. –

+5

+1 per l'uso di JSON. Nota: la funzione json_decode() richiede che il secondo parametro sia "true" per restituire un array associativo! (o restituirà un oggetto "stdClass") –

2

Come su eval? Dovresti anche usare var_export con la variabile return come true invece di 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

Un altro esempio che utilizza $ myArray quando l'OP ha dichiarato che desidera utilizzare var_dump() di esso. NON l'array. In quello che ci riguarda, l'array potrebbe essere già andato e lui sta solo citando per noi per sapere di cosa fosse la discarica. – 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); 

USCITA

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