Можно ли преобразовать дамп массива обратно в массив? Например, с помощью print_r() я получаю дамп:
Array
(
[key_1] => Array
(
[0] => str 1
[1] => 30
[2] => text
)
[key_2] => Array
(
[0] => 10
[1] => 20
[2] => 38
[3] => 41
)
)
Этот дамп нужно преобразовать к такому виду:
Array
(
'key_1' => Array
(
0 => 'str 1',
1 => 30,
2 => 'text',
),
'key_2' => Array
(
0 => 10,
1 => 20,
2 => 38,
3 => 41,
),
)
То есть, что бы можно было просто скопировать преобразованный дамп, сохранить в переменную и получить готовую структуру массива.
Можно попробовать решить с помощью регулярных выражений. Например, дамп массива сохранить в строковой переменной:
$input = 'Array
(
[key_1] => Array
(
[key_1] => str 1
[1] => 30.g
[2] => text text
)
[key_2] => Array
(
[0] => 10
[1] => 20,r
[2] => 38/1
[3] => 41.1
)
)';
И обработать эту переменную в preg_replace():
$patt = [
'~\[(\d+)]~',
'~\[(.+)]|(?<==>\s)(?!Array)(.+)(?!$)~um',
"~'(\d+(?:\.\d+)*)'~",
'~(?<==>\s)(?!Array)(.+)(?!$)~m',
'~(?<=\))(?!$)~m'
];
$repl = ['$1', "'\$1\$2'", '$1', '$1,', ','];
$output = preg_replace($patt, $repl, $input);
echo '<pre>', $output, '</pre>';
Полученную в результате обработки строку вида:
Array
(
'key_1' => Array
(
'key_1' => 'str 1',
1 => '30.g',
2 => 'text text',
),
'key_2' => Array
(
0 => 10,
1 => '20,r',
2 => '38/1',
3 => 41.1,
),
)
Можно сохранить в переменную:
$arr = Array
(
'key_1' => Array
(
'key_1' => 'str 1',
1 => '30.g',
2 => 'text text',
),
'key_2' => Array
(
0 => 10,
1 => '20,r',
2 => '38/1',
3 => 41.1,
),
);
И работать с ней, как с массивом:
var_dump($arr);
Результат:
array (size=2)
'key_1' =>
array (size=3)
'key_1' => string 'str 1' (length=5)
1 => string '30.g' (length=4)
2 => string 'text text' (length=9)
'key_2' =>
array (size=4)
0 => int 10
1 => string '20,r' (length=4)
2 => string '38/1' (length=4)
3 => float 41.1
Сборка персонального компьютера от Artline: умный выбор для современных пользователей