2010-12-02 2 views

Antwort

16

Verwenden Sie explode(), Sie können eine Regexp dafür verwenden, aber es ist einfach genug ohne den Overhead.

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

Wie in den Kommentaren erwähnt, wenn Daten von einem Windows/DOS-Umgebung kommt es würde möglicherweise auch CRLF Zeilenumbrüche haben, die folgende Zeile vor dem foreach() dass lösen.

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

Vergessen Sie nicht, das mögliche '" \ r "' von '$ cValue' zu ​​entfernen. – Jon

+0

@Jon Ganz richtig, geändert mit dieser Änderung und einer Regexp-Version, die ziemlich angenehm ist. – Orbling

+0

toll, funktioniert wie ein Charme! Vielen Dank! – cukabeka

1

explodiert zuerst auf Zeilenumbruch: mit preg_match_all() und array_combine()

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

Die Alternative mit regexp kann sehr angenehm sein. Prolly \ n

Dann explodieren Sie alle Elemente des resultierenden Arrays auf: und setzen Sie ein neues Array auf diesen Schlüssel/Wert.

2

dieses Versuchen

$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); 
Verwandte Themen