2009-03-26 15 views
8

Ich habe ein Array:Konvertieren von PHP-Array String in ein Array

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

ich es als Variable speichern:

$fileContents = var_dump($myArray); 

Wie kann die Variable umwandeln zurück als reguläres Array zu benutzen?

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

Wenn Sie 'verwenden print_r' statt' var_dump', können Sie mit [print_r Reverse-Funktion] (http://www.php.net/ Handbuch/de/function.print-r.php # 93529). – machineaddict

Antwort

19

Ich glaube, Sie könnten in serialize und unserialize zu suchen.

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

Aber es ist keine Antwort auf die Frage. – marines

+0

@marines: es ist nicht? –

+2

Ihre Lösung behandelt nicht das Zurücksetzen der Ausgabe von var_dump() in Array (das war die Frage). Es ist nur ein weiterer Weg, Serialisierung und Serialisierung eines Arrays durchzuführen. – marines

7

Versuchen var_export mit gültiger PHP-Syntax zu erzeugen, das in eine Datei schreiben und dann ‚umfassen‘ die Datei:

$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

Das hat mich sehr, sehr glücklich gemacht! Vielen Dank! –

+0

Jeder sollte vergessen, $ myArray als Quelle für jedes Beispiel hier zu verwenden. Das OP hat klar gesagt, dass er von einem Dump starten will, nicht vom eigentlichen Array. Er hat eine Zeichenfolge mit dem Dump, nicht das Array. Er möchte die Saite nicht erzeugen. – sergio

18

serialize könnte die richtige Antwort sein - aber ich JSON lieber mit - Redigieren der Daten wird möglich sein, auf diese Weise ...

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

+1, ich weiß nicht, warum ich anfangs nicht darüber nachgedacht habe. Das benutze ich auch persönlich. –

+5

+1 für die Verwendung von JSON. Hinweis: Die Funktion json_decode() benötigt den zweiten Parameter, um "wahr" zu sein, um ein assoziatives Array zurückzugeben! (oder es wird ein "stdClass" -Objekt zurückgeben) –

2

Wie wäre es eval? Sie sollten auch var_export mit der Rückgabevariablen als true anstelle von var_dump verwenden.

$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

Ein anderes Beispiel, das $ myArray verwendet, wenn das OP angibt, dass er die var_dump() davon verwenden möchte. NICHT das Array. Was uns betrifft, ist das Array möglicherweise schon weg und er erwähnt es nur für uns, um zu wissen, worum es bei der Deponie geht. – 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); 

OUTPUT

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