Как экспортировать массив PHP, где каждая пара ключей и значений находится в отдельной строке?

Я ищу эквивалентную функциональность var_export(), которая позволяет мне экспортировать массив PHP в синтаксический код, но каждый оператор должен быть напечатан в отдельной строке (поэтому каждая строка имеет свою собственную независимую структуру).

В настоящее время этот код:

<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>

выведет:

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

Однако я ищу для вывода в следующем формате, например:

$foo = array()
$foo['0'] = 1
$foo['1'] = 2
$foo['2'] = array();
$foo['2']['0'] = 'a';
$foo['2']['1'] = 'b';
$foo['2']['2'] = 'c';

поэтому выполнение этого результата приведет к тому же оригинальному массиву.

Цель состоит в том, чтобы управлять очень большими массивами в понятном для человека формате, поэтому вы можете легко отменить некоторые выбранные элементы только методом копирования и вставки (где каждая строка содержит полный путь к элементу). Обычно, когда вы выгружаете очень большой массив на экране, проблема в том, что вы должны прокручивать очень долгое время, чтобы найти своего родительского родителя, и практически невозможно выяснить, какой элемент принадлежит к нему и каков его полный путь, много времени.

Ответ 1

В настоящее время я найден здесь (отправил ravenswd) эту простую функцию, которая может достичь этого:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Вывод для recursive_print('$a', $a);:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

Ответ 2

Вы можете использовать простое решение с помощью json_encode следующим образом.

<?php
$arrayA = array (1, 2, array ("a", "b", "c"));
$arrayString=json_encode($a);
$arrayB=json_decode($arrayString);
?>

Здесь все, что вам нужно сделать, - закодировать массив в json (который вернет строку) с помощью json_encode. Затем вы можете сохранить полученную строку в любом месте.

Когда вы прочтете эту строку назад, вы должны вызвать json_decode, чтобы получить исходный php-массив.

Надеюсь, это простое решение того, чего вы хотите достичь.

Ответ 3

Попробуйте этот подход:

<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function print_item($item, $key){
    echo "$key contains $item\n";
}

array_walk_recursive($fruits, 'print_item');
?>

Рекурсивная функция массива, применяет любую функцию ко всем элементам в массиве.

Ура!

-Orallo