Utilisez explode(), vous pouvez utiliser une expression rationnelle pour cela, mais c'est assez simple sans la surcharge.
$data = array();
foreach (explode("\n", $dataString) as $cLine) {
list ($cKey, $cValue) = explode(':', $cLine, 2);
$data[$cKey] = $cValue;
}
Comme mentionné dans les commentaires, si les données provient d'un environnement Windows/DOS, il peut bien avoir des nouvelles lignes CRLF, en ajoutant la ligne suivante avant la foreach()
résoudrait cela.
$dataString = str_replace("\r", "", $dataString); // remove possible \r characters
L'alternative avec regexp peut être très agréable en utilisant preg_match_all() et array_combine():
$matches = array();
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
$data = array_combine($matches[1], $matches[2]);
n'avez pas vous? – SilentGhost