2011-06-17 58 views
2

是否有可能有一個這樣的字符串:使用explode()拆分字符串並設置變量可能?

| 
details==Here are some details 
| 
facebook_url==therweerw 
| 
random_word==blah blah 
| 

,並得到這樣的:

$details = "Here are some details"; 
$facebook_url = "therweerw"; 
$random_word = "blah blah"; 

主要的一點是我想的方式來解析這個該字符串向左的「==」分隔符將成爲一個變量,字符串的右邊是字符串。我想不必硬編碼這些變量。

+0

爆炸不會是一個不錯的選擇,至少不會被它的自我。您還有一個結束報價缺少細節 – Ibu 2011-06-17 06:13:06

+0

我很想看到這個工作:-)。要理解這一點,你想要生成任何PHP代碼?或者您希望將其作爲執行某些操作的代碼的一部分。 – 2011-06-17 06:14:16

回答

5
$str = '| 
details==Here are some details 
| 
facebook_url==therweerw 
| 
random_word==blah blah 
|'; 

preg_match_all('~^(\w+)==(.*)$~m', $str, $matches); 

foreach ($matches[1] as $i => $name) { 
    $$name = $matches[2][$i]; 
} 

var_dump($details, $facebook_url, $random_word); 

並運行樣本:http://ideone.com/Vns7Y

+0

我的意思是,你還想要什麼? – 2011-06-17 06:17:01

+0

@Doug Owings:呃,什麼?我想要百萬美元;-) – zerkms 2011-06-17 06:18:03

+0

只是說:花了你四分鐘後發佈一個工作樣本。令人印象深刻。 – 2011-06-17 06:19:12

1

您可以使用explode()extract()的組合來做到這一點。

+0

如何提取()'幫助這個? – binaryLV 2011-06-17 06:17:55

+0

'extract()'是當你有一個關聯數組,其中鍵是x的,值是y的時候做'$$ x = y;'集合的等價物的另一種方法。 – Amber 2011-06-17 06:22:31

+0

我知道'extract()'做了什麼。我問'extract()'如何在'explode()'創建一個帶有數字索引的數組時有用。你真的建議使用循環來創建一個變量名爲鍵的數組,然後使用'extract()'而不是直接在同一個循環中創建變量嗎? – binaryLV 2011-06-17 06:24:44

1

我可能會使用preg_match_all()這一點,但這裏有explode()例如:

$str = "| 
details==Here are some details 
| 
facebook_url==therweerw 
| 
random_word==blah blah 
|"; 
$str = str_replace("\r", '', $str); 
$str = trim($str, "|\r\n"); 
foreach (explode("\n|\n", $str) as $line) { 
    $line = trim($line); 
    list($varName, $varValue) = explode('==', $line); 
    ${$varName} = $varValue; 
} 
var_dump($details, $facebook_url, $random_word); 

輸出:

string 'Here are some details' (length=21) 
string 'therweerw' (length=9) 
string 'blah blah' (length=9) 
相關問題