2010-12-02 57 views

回答

16

使用explode(),你可以使用它的正则表达式,但它很简单,没有开销。

$data = array(); 
foreach (explode("\n", $dataString) as $cLine) { 
    list ($cKey, $cValue) = explode(':', $cLine, 2); 
    $data[$cKey] = $cValue; 
} 

正如评论所说,如果数据从一个Windows/DOS环境下很可能有CRLF换行符的到来,加上之前foreach()以下行会解决这个问题。

$dataString = str_replace("\r", "", $dataString); // remove possible \r characters 

用正则表达式的替代可以用preg_match_all()array_combine()是很愉快:

$matches = array(); 
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches); 
$data = array_combine($matches[1], $matches[2]); 
+0

不要忘记至少从`$ cValue`去掉可能的`“\ r”`。 – Jon 2010-12-02 14:32:25

1

第一爆炸的换行符。 Prolly \ n

然后展开每个结果数组的项目:并将一个新数组设置为该键/值。

2

试试这个

$value = '1|a,2|b,3|c,4|d'; 
$temp = explode (',',$value); 
foreach ($temp as $pair) 
{ 
    list ($k,$v) = explode ('|',$pair); 
    $pairs[$k] = $v; 
} 

print_r($pairs);