Как извлечь массив из строки?

Есть строка вида 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


Однако стоит заметить, что данный вид хранения весьма специфичен (читай как неприемлем в сообществе разработчиков-профессионалов),поэтому стОит подумать над правильным решением хранения данных

→ Ссылка