Как извлечь массив из строки?
Есть строка вида Array( [order] => Array([id] = > 1 [fake] => false)) Извлечена из БД, где хранится в виде строки, как её перевести в массив? explode, implode и преобразование в массив нужного результата не выдаёт.
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Мотороллер не мой, я просто разместил объяву:
function text_to_array($str) {
//Initialize arrays
$keys = array();
$values = array();
$output = array();
//Is it an array?
if( substr($str, 0, 5) == 'Array' ) {
//Let's parse it (hopefully it won't clash)
$array_contents = substr($str, 7, -2);
$array_contents = str_replace(array(' ', '[', ']', '=>'), array('', '#!#', '#?#', ''), $array_contents);
$array_fields = explode("#!#", $array_contents);
//For each array-field, we need to explode on the delimiters I've set and make it look funny.
for($i = 0; $i < count($array_fields); $i++ ) {
//First run is glitched, so let's pass on that one.
if( $i != 0 ) {
$bits = explode('#?#', $array_fields[$i]);
if( $bits[0] != '' ) $output[$bits[0]] = $bits[1];
}
}
//Return the output.
return $output;
} else {
//Duh, not an array.
echo 'The given parameter is not an array.';
return null;
}
}
Если скормить
$array_string = <<<TEST
Array
(
[foo] => bar
[bar] => foo
[foobar] => barfoo
)
TEST;
$result = text_to_array($array_string);
то в $result будет нужный массив.
Ещё две функции:
https://gist.github.com/llagerlof/fc2031024c0563bc69d76dd2a1fbcb4c
Однако стоит заметить, что данный вид хранения весьма специфичен (читай как неприемлем в сообществе разработчиков-профессионалов),поэтому стОит подумать над правильным решением хранения данных