Как создать массив из вывода var_dump в PHP?

Как я могу проанализировать вывод var_dump в PHP для создания массива?


person omg    schedule 15.09.2009    source источник


Ответы (6)


Используйте 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 (), которые больше подходят для этой задачи.

person Paul Dixon    schedule 15.09.2009
comment
Это не правильно. Он не создает массив, он просто превращает $ foo в строку, которая равна $ dump, которая также является строкой, которую следует проанализировать. - person Elia Iliashenko; 08.07.2015
comment
Нет, это не работает. Когда я беру строку outputtet, закомментирую ваши первые две строки и устанавливаю $ dump для этой выводимой строки (html или текст), я получаю синтаксическую ошибку. Таким образом, другое дело использовать переменную var_export-ed и иметь только уже имеющуюся строку var_dump-ed. - person Seika85; 25.08.2015
comment
Если вы получаете синтаксическую ошибку, значит, вы делаете что-то не так. Предлагаю вам задать новый вопрос. - person Paul Dixon; 25.08.2015

У меня была аналогичная проблема: длительный скрипт производил в конце 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
person qbolec    schedule 06.02.2012
comment
хороший ответ, единственная проблема заключается в том, что у вас есть значения, содержащие строки ... поэтому они не обертываются '' - person WonderLand; 11.06.2014
comment
Определенно это был просто быстрый взлом, который сработал для моего конкретного сценария. В общем, var_dump ужасно анализировать, поэтому, когда это возможно, я использую что-то еще (в основном json_encode). Вы правы, что струны могут вызвать проблемы. Огромные проблемы, если они содержат косые черты или кавычки. Умеренный, если содержит что-то, что само по себе выглядит как вывод var dump (= ›, [8] или int (12)) :) - person qbolec; 25.08.2014

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

person Joey    schedule 15.09.2009
comment
А как насчет того, у кого есть строка из var_dump через goold old copy paste? (Я знаю людей, которые копируют и вставляют огромные var_dump в текстовые файлы и отправляют эти текстовые файлы мне.) - person Seika85; 25.08.2015
comment
@ Seika85: Вы можете сказать им использовать буферизацию вывода, чтобы получить результат в виде строки. Но для целей этого вопроса это все равно «Нет», поскольку они спрашивали о получении массива. - person Joey; 26.08.2015

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

person Palantir    schedule 15.09.2009

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

person Gumbo    schedule 15.09.2009

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

Но мне интересно, что у вас за идея?

person knittl    schedule 15.09.2009