2009-03-26 3 views
8

У меня есть массив:Преобразование PHP массив строк в массив

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

Я сохранить его в переменной:

$fileContents = var_dump($myArray); 

Как преобразовать переменную обратно использовать как обычный массив?

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

Если вы используете 'print_r' вместо' var_dump', вы можете использовать [print_r обратная функция] (http://www.php.net/ ручной/EN/function.print-r.php # 93529). – machineaddict

ответ

19

Я думаю, вы можете посмотреть в serialize и unserialize.

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

Но это не ответ на вопрос. – marines

+0

@marines: это не так? –

+2

Ваше решение не распространяется на возврат результата var_dump() в массив (это был вопрос). Это просто еще один способ выполнить сериализацию и неэтериализацию массива. – marines

7

Попробуйте использовать var_export генерировать правильный синтаксис PHP, пишут, что в файл, а затем «включить» файл:

$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

Это сделало меня очень счастливым! благодаря! –

+0

Каждый должен забыть об использовании $ myArray в качестве источника для любого примера здесь. ОП ясно сказал, что он хочет начать с дампа, а не с фактического массива. У него есть строка с дампом, а не массив. Он не хочет генерировать строку. – sergio

18

сериализации может быть правильный ответ - но я предпочитаю использовать JSON - человеческое редактирование данных будет возможно, что путь ...

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

+1, я не знаю, почему я не думал об этом изначально. Это то, что я лично использую. –

+5

+1 для использования JSON. Примечание: функция json_decode() требует, чтобы второй параметр был «истинным» для возврата ассоциативного массива! (или он вернет объект «stdClass») –

2

Как насчет Eval? Вы также должны использовать var_export с возвращаемой переменной как true вместо 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

Другой пример, который использует $ myArray, когда OP заявил, что хочет использовать var_dump(). НЕ массив. В том, что касается нас, массив, возможно, уже ушел, и он только упоминает об этом, чтобы мы знали, что такое свалка. – 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); 

ВЫВОД

 
Array ([0] => 10 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => '4' [6] => '5' [7] => '6'] [8] => 3) 
Смежные вопросы