Salut,
alors à première vue, je vois 2 solutions:
1) la 1ere consiste à exploser la chaine à l'aide de plusieurs explode() consécutifs, le 1er pour séparer chaque séquence 'xxx:yyy' et le 2eme pour séparer chaque donnée 'xxx yyy'. Enfin, il faut tester si le 1er caractère de la donnée x est un ! et si la donnée x = client_view.
2) l'utilisation des regex. Comparé à la première méthode, celle-ci demande un peu plus de réflexion ,notamment, pour la recherche du masque de filtrage (pattern).
Dans tous les cas, c'est la solution qui s'execute le plus vite qu'il faut privilégier. A toi de voir laquelle est la plus rapide.
Malgré tout, voici un exemple implémentant la solution regex. Petit hic, la dernière donnée doit absolument se terminer par une virgule.
<?php $key = 0; $result = array(); $str2parse = '!view_client:*,view_client:view_all,client:*,!client:acl,!client:domaine,!commercial:*,member:*,view_client:toto,'; $pattern = '#(!?)(view_client):(.+?),#i'; preg_match_all($pattern,$str2parse,$matches,PREG_SET_ORDER); $count = count($matches); for ($i=0; $i<$count; $i++) { if ($matches[$i][1] != '!') { $result[$key][ $matches[$i][2] ] = $matches[$i][3]; $key++; } } echo '<pre>',print_r($result),'</pre>'; ?>
|