2010-01-02 4 views

Répondre

6

Vous pouvez utiliser une expression régulière pour obtenir les paires clé/valeur:

preg_match_all('/(\w+)="([^"]*)"/', $str, $matches); 

Mais ce serait juste obtenir les paires clé complète/valeur. Les entrées invalides comme key=value" ne seraient pas reconnues. Un analyseur ferait mieux.

4

EDIT: La réponse de Gumbo est une meilleure solution à cela.

Cela vous convient-il?

Supposons que votre chaîne est dans une variable comme ceci:

$string = 'key1="value" key2="2nd value" key3="3rd value"'; 

Première:

$array = explode('" ', $string); 

vous avez maintenant

array(0 => 'key1="value', 1=>'key2="2nd value', 2=>'key3="3rd value'); 

Puis:

$result = array(); 
foreach ($array as $chunk) { 
    $chunk = explode('="', $chunk); 
    $result[$chunk[0]] = $chunk[1]; 
} 
+2

ayant écrit ceci, je préfère la réponse de gumbo! – benlumley

+1

Qu'en est-il de 'key =" value "' ou 'key =" = "'? – Gumbo

+0

totalement - comme je l'ai dit, préférez le vôtre! – benlumley

1

En utilisant l'expression régulière suggérée par Gumbo je suis venu avec ce qui suit pour convertir la chaîne donnée à un tableau associatif:

$s = 'key1="value" key2="2nd value" key3="3rd value"'; 
$n = preg_match_all('/(\w+)="([^"]*)"/', $s, $matches); 

for($i=0; $i<$n; $i++) 
{ 
    $params[$matches[1][$i]] = $matches[2][$i]; 
} 

Je me demandais si vous aviez des commentaires.

Questions connexes