Page 1 sur 1
splitter une chaine suivant 2 delimiteurs
Posté : 21 mai 2007, 11:22
par risa83
Bonjour,
Je souhaite splitter une chaine suivant 2 delimiteurs dans un tableau.
J'ai trouvé la fonction basique "preg_split" qui à partir d'un chaine découpe suivant un délimiteur et range le resultat dans un tableau.
Pour résoudre mon problème, j'ai pensé créer une fonction qui split une première fois la chaine suivant mon 1er delimiteur puis qui parcourt le tableau créé afin de retirer les éléments ne contenant pas mon 2ème delimiteur ...
Le problème de cette fonction est que le temps de traitement risque d'etre un peu long.
Pensez vous que c'est la meilleure solution?
Merci
Posté : 21 mai 2007, 11:27
par Maitrepylos
Et pourquoi ne pas remplacer ton deuxième délimiteurs par le premiers et puis splitter?
Posté : 21 mai 2007, 12:17
par titerm
Et pourquoi pas utiliser split() qui est fait pour ca et capable de gérer autant de séparateur que l'on veut ?
Posté : 21 mai 2007, 13:03
par Invité
Je pense que la meilleure solution est de la forme :
$str = 'aaa:xxx/mmm:zzz/truc:chose';
$tab = explode('/', $str);
$dump = array();
foreach ($tab as $line)
$dump[] = explode(':', $line);
// $dump vaudra :
// 0 => array('aaa', 'xxx')
// 1 => array('mmm', 'zzz')
// 2 => array('truc', 'chose')
Posté : 21 mai 2007, 13:07
par Invité
Pardon, j'ai posté un peu vite ...
Une condition peut être ajoutée dans le foreach afin de ne garder que les chaines contenant le délimiteur :
// Solution strchr()
foreach ($tab as $line)
if (strchr(':', $line) !== false) $dump[] = explode(':', $line);
Re: splitter une chaine suivant 2 delimiteurs
Posté : 21 mai 2007, 13:11
par Hubert Roksor
Pensez vous que c'est la meilleure solution?
Il n'y a pas de "meilleure solution", tout dépend du type de données, la taille moyenne des chaînes, le nombre de chaînes à traiter, le nombre d'éléments par chaînes, etc...
preg_split() a les meilleures chances d'être rapide et constant, mais si tu veux une meilleure réponse il faudrait nous en dire un petit peu plus.
Posté : 21 mai 2007, 14:22
par risa83
@Hubert Roksor :
Pour etre un peu plus précis, mon but est de récupérer le positionnement d'un recherche sur un moteur de recherche. Les 2 délimiteurs me permettent de calculer le positionnement au fur et à mesure en fonction du code source résultant...
J'espere avoir été clair

Posté : 21 mai 2007, 15:58
par mere-teresa
Est-ce que tes résultats de recherche sont dans un tableau, ou bien ce sont les mots précis (donc chaîne) que tu veux repérer ?
Posté : 21 mai 2007, 17:19
par risa83
@mere-teresa: Je veux stocker toutes les chaines présentes entre les 2 deéimiteurs
Par expl: Délimiteur1=*8 et Délimiteur2=$32
$str= "*8 aabbcc $32 fsdlk *8 ddeeff $32 nlsd"
je veux pouvoir récupérer "aabbcc" et "ddeeff" que je stocke dans un tableau ..
Posté : 21 mai 2007, 17:38
par naholyr
En expression régulière ce que tu veux faire c'est matcher tout ce qui est entre Delim1 et Delim2, et dans ce langage ça se dit Delim1(.*?)Delim2.
Un preg_match_all() avec cette expression régulière te donnera ce que tu cherches (et n'oublie pas d'appliquer un coup de preg_quote() sur tes délimiteurs vu qu'ils ont des caractères zarbi).
Posté : 21 mai 2007, 17:46
par risa83
Merci je ne connaissais pas cette fonction
Je vais tester
