2010-12-02 85 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);