2011-06-17 51 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)