2010-12-02 19 views

Répondre

16

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]); 
+0

N'oubliez pas d'au moins enlever le possible '" \ r "' de '$ cValue'. – Jon

+0

@Jon Tout à fait raison, modifié avec cette modification et une version regexp qui est assez agréable. – Orbling

+0

super, fonctionne comme un charme! Merci! – cukabeka

1

explosez sur saut de ligne. Prolly \ n

Ensuite, éclatez chacun des éléments du tableau résultant sur: et définissez un nouveau tableau sur cette clé/valeur.

2

Essayez cette

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