2013-09-26 3 views
2
$str = 'answers[0] = "Love it"; answers[1] = "Hate it."; answers[2] = "Doesnt care"; answers[3] = "Like it";' 

Как преобразовать массив в массив?PHP преобразовать список массивов строк в Array

+7

Первый вопрос: как вы получили такую ​​строку? –

+4

Похож на проблему [XY] (http://meta.stackexchange.com/a/66378). Где вы получаете эту строку? – Reeno

+0

Нелегко преобразовать его в массив ... как мы можем разделить этот тип строк ... ?? попробуйте передать этот ввод только с определенными значениями. –

ответ

1
$str = 'answers[0] = "Love it"; answers[1] = "Hate it."; answers[2] = "Doesnt care"; answers[3] = "Like it";'; 

preg_match_all('/"(.*)";/U', $str, $matches); 
$arr = $matches[1]; 

var_dump($arr); 
+0

Будет ли работать с пилой выше, но сбой, если есть другие строковые литералы (или может быть HEREDOCS e.t.c.) –

+0

Зависит от того, имеет ли OP какие-либо другие варианты –

+0

Да, я так думаю. –

0

Что-то вроде этого?

<?php 
$str = '$answers[0] = "Love it"; $answers[1] = "Hate it."; $answers[2] = "Doesnt care"; $answers[3] = "Like it";'; 
eval($str); 
print_r($answers); 

?> 
+2

Не используйте 'eval()', если вам это не нужно. И всегда есть другой способ добиться того, чего вы хотите. Кроме того, в строке примера OP нет знаков '' ', поэтому это не ответ. –

+1

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

1

Использование

preg_split

выбрать только значения и поместить его в массив,

пример:

$keywords = preg_split("/[\s,]+/", $str); 

Просто измените р attern!

проверка документации: http://php.net/manual/en/function.preg-split.php

1
$str = 'answers[0] = "Love it"; answers[1] = "Hate it."; answers[2] = "Doesnt care"; answers[3] = "Like it";'; 
$chunks = explode(';', $str); 

for ($aa=0;$aa<count($chunks);$aa++) 
{ 
    $chunks1 = explode('=', $chunks[$aa]); 
    $myArray[]=$chunks1[1]; 
} 
+0

есть ошибка с $ myArray [] = $ Chunks1 [1]; –

+0

Какая ошибка вы получаете? – sskoko

0
$str = 'answers[0] = "Love it"; answers[1] = "Hate it."; answers[2] = "Doesnt care"; answers[3] = "Like it";'; 

preg_match_all('/"(.*?)"/', $str, $answers); 

$answer = $answers[0]; 
print_r($answer); 
+0

хорошая работа, спасибо –

1

Если вы можете добавить новые строки после запятой (;), посмотрите на функцию parse_ini_string().

$str = str_replace(';', "\n", $str); // <- add them in the source if you can 
$array = parse_ini_string($str); 
+0

да, другое решение, которое работает. Спасибо друг! –

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