Page 1 sur 1

supprimer occurence tableau

Posté : 04 janv. 2012, 19:16
par djodjo
Bonjour,

Je veux supprimer certaine valeurs dans des chaines de caractères selon des conditions très précises.
Chaque caractère génère une autre valeur entre | |
Je précise que je ne peux pas changer ces chaines de caractère, faut que je fasse avec leurs formats :'(

p,B1 |5| |4| A5 , A7, A10 |6| |9| |11|

p,B5,B7 |1| |2,3,4| |5| A5 , A11 |4| |5|

p, B7, B8, B9 , B10 , B11 || || || || || || A9 , A25 |8| |17|

Je veux supprimer le début de chaque ligne selon l'algo suivant:
-compter le nombre d occurence séparé par une virgule AVANT le premier | et supprimer autant de couple de || quoiquil y est a l'intérieur
-sauvergarder le reste de la ligne

Dans mes exemples , ce qui est en rouge est ce que je veux supprimer. Et le reste est ce que je veux sauvegarder.

Comment dois je coder ce tronquage ? L'algo me parait un peu complexe, je viens de perdre mon aprem à essayer :p

Je vous remercie de toute aide apportée..

Re: supprimer occurence tableau

Posté : 04 janv. 2012, 23:35
par Ryle
Tu dois pouvoir le faire à coup d'expression régulières uniquement, mais j'ai un peu la flemme de trouver la bonne, alors je te le donne avec substr_count et strpos pour calculer le nombre d'occurrences à éliminer :)
// compte le nombre de ',' jusqu'au premier '|', et ajoute 1 pour connaitre le nombre d'occurences
$nb = substr_count($taChaine, ',' , 0 , strpos($taChaine, '|')) + 1;

// remplace les 2*nb premières occurrences de "un truc suivi d'un pipe"  
echo preg_replace("/^(.*\|){".(2*$nb)."}/U", "", $taChaine);

Re: supprimer occurence tableau

Posté : 05 janv. 2012, 13:53
par djodjo
Voici ce que l'on m'as proposé sur un autre forum, si cela peut servir à quelqu'un..
Je précise que ma chaîne de caractère un peu complexe était issu d'une fonction de drag and drop qui me renvoyait la position des éléments déplacé en gardant un hiérarchie père fils.
http://devheart.org/articles/jquery-cus ... -and-drop/
J'en doute mais bon.


Code : Tout sélectionner

<?php $str = "p, B7, B8, B9 , B10 , B11 || || || || || || A9 , A25 |8| |17|"; //$str = "p,B5,B7 |1| |2,3,4| |5| A5 , A11 |4| |5|"; $len = strlen($str); $nbComma = 0; $nbPipe = 0; $nbValues = 0; for($i = 0; $i < $len; ++$i) { $char = $str[$i]; if ($char === '|') { if ($nbPipe === 0) { $nbValues = ($nbComma + 1) * 2; } if (++$nbPipe === $nbValues) { $toKeep = trim(substr($str, $i + 1)); break; } } else if ($char === ',') { ++$nbComma; } } echo $toKeep; ?>

Re: supprimer occurence tableau

Posté : 05 janv. 2012, 21:05
par Ryle
Ouais mais ma solution elle a quand même plus la classe :langue: