2013-05-30 3 views
1

У меня есть эта строка:PHP ~ Преобразование строки в массив

array('type' => 'button', 'value' => 35); 

Простой вопрос: Каким образом можно преобразовать эту строку в массив?

Проблема заключается в том, eval сосет и explode(",",$string) ловит неправильные запятые иногда:

array('t,y,p,e' => 'bu,t,t,o,n', 'va,,,l,,ue' => '3,,,,,5'); 
+1

Что является источником строки? –

+0

array ('type' => 'button', 'value' => 35) не является строкой, это массив. Вы имеете в виду строку внутри массива? –

+0

@EduardoMoratto Я думаю, что он означает, что это значение строки. – christopher

ответ

1

Я сомневаюсь, что вы найдете функцию, чтобы прочитать строку в качестве кода за пределами Eval. Так если вы всегда имеют ту же самую жесткую структуру, вы могли бы сделать что-то вроде этого -

$str = "array('type' => 'button', 'value' => 35)"; 
preg_match_all('/\(.*?\)/', $str, $arr); 

if(isset($arr[0])) 
{ 
    $array = array(); 
    $items = explode(",", substr($arr[0][0], 1, -1)); 
    foreach($items AS $i) 
    { 
    $kv = explode(" => ", $i); 
    $array[str_replace("'", "", trim($kv[0]))] = str_replace("'", "", trim($kv[1])); 
    } 

    print_r($array); 
} 

который довольно отвратительный, но это быстрый хак, чтобы извлечь массив из строки. Я не говорю, что это «хорошее» решение вашей проблемы, но это быстрое решение и будет работать для того, что вы предоставили в качестве примера.

Не стесняйтесь задавать вопросы и, конечно же, предлагать лучшее решение.

Смежные вопросы