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

如何將其轉換爲數組?PHP將字符串數組列表轉換爲數組

+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

取決於是否有任何其他變種 –

+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
$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

是的,另一個解決方案是有效的。謝了哥們! –