Как создать массив из вывода var_dump в PHP? - PullRequest
5 голосов
/ 15 сентября 2009

Как я могу разобрать вывод var_dump в PHP, чтобы создать массив?

Ответы [ 6 ]

24 голосов
/ 15 сентября 2009

Используйте var_export , если вы хотите представление, которое также является действительным кодом PHP

$a = array (1, 2, array ("a", "b", "c"));
$dump=var_export($a, true);
echo $dump;

будет отображаться

array (
 0 => 1,
 1 => 2,
 2 => 
 array (
   0 => 'a',
   1 => 'b',
   2 => 'c',
 ),
)

Чтобы превратить это обратно в массив, вы можете использовать eval, например,

eval("\$foo=$dump;");
var_dump($foo);

Не уверен , почему вы бы хотели это сделать, хотя. Если вы хотите где-то сохранить структуру данных PHP, а затем воссоздать ее, посмотрите serialize () и unserialize () , которые больше подходят для этой задачи.

1 голос
/ 06 февраля 2012

У меня была похожая проблема: длинный скрипт запускал в конце vardump большого массива. Мне пришлось как-то разобрать его для дальнейшего анализа. Мое решение было так:

cat log.stats  | 
  sed 's/\[//g' | 
  sed 's/\]//g' | 
  sed -r 's/int\(([0-9]+)\)/\1,/g' | 
  sed 's/\}/\),/g' | 
  sed -r 's/array\([0-9]+\) \{/array(/g' > 
  log.stats.php
1 голос
/ 15 сентября 2009

var_export создает код PHP, который вы можете запустить через eval.

Но мне интересно, какова ваша идея?

1 голос
/ 15 сентября 2009

Возможно, вы пытаетесь преобразовать объект в массив? http://www.phpro.org/examples/Convert-Object-To-Array-With-PHP.html

1 голос
/ 15 сентября 2009

Возможно, вы ищете var_export, который даст вам правильное PHP-выражение переданного значения.

1 голос
/ 15 сентября 2009

Вы не можете. var_dump просто выводит текст, но ничего не возвращает.

...