2009-03-26 21 views
8

Mam tablicę:Konwersja tablicy PHP ciąg do tablicy

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

zapisać go jako zmienną:

$fileContents = var_dump($myArray); 

Jak przekonwertować zmienną z powrotem do wykorzystania jako zwykłej tablicy?

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

Jeśli używasz 'print_r' zamiast' var_dump', można użyć [print_r odwrotna funkcja] (http://www.php.net/ instrukcja/en/function.print-r.php # 93529). – machineaddict

Odpowiedz

19

myślę warto zajrzeć do serialize i unserialize.

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

Ale to nie jest odpowiedź na pytanie. – marines

+0

@marines: nie jest? –

+2

Twoje rozwiązanie nie obejmuje przywracania wyjścia var_dump() do tablicy (to było pytanie). To tylko kolejny sposób na dokonanie serializacji i odserializowanie tablicy. – marines

7

Spróbuj użyć var_export wygenerować poprawną składnię PHP, napisać, że do pliku, a następnie 'to' plik:

$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

To bardzo mnie ucieszyło! dzięki! –

+0

Każdy powinien zapomnieć o użyciu $ myArray jako źródła dowolnego przykładu tutaj. OP wyraźnie mówi, że chce zacząć od zrzutu, a nie rzeczywistej tablicy. Ma ciąg z zrzutem, a nie tablicę. Nie chce generować ciągu. – sergio

18

serialize może być właściwą odpowiedź - ale wolę za pomocą JSON - ludzki edycji danych będzie możliwe, że droga ...

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

+1, nie wiem, dlaczego początkowo o tym nie myślałem. To też ja osobiście używam. –

+5

+1 za korzystanie z JSON. Uwaga: funkcja json_decode() wymaga, aby drugi parametr miał wartość "true", aby zwrócić tablicę asocjacyjną! (lub zwróci obiekt "stdClass"). –

2

Jak o eval? Powinieneś także użyć zmiennej var_export ze zmienną zwracaną jako true zamiast 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

Kolejny przykład, który używa $ myArray, gdy OP stwierdził, że chce użyć funkcji var_dump(). NIE tablica. W tym, co nas dotyczy, tablica mogła już zniknąć, a on tylko wspomina o tym, abyśmy wiedzieli, co to za zrzut. – 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); 

WYJŚCIE

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