Changer d'action en fin de foreach

Changer d'action en fin de foreach - PHP - Programmation

Marsh Posté le 10-07-2007 à 00:26:46    

:hello:
 
J'utilise actuellement un foreach sur un array pour récupérer ses valeurs. A chaque foreach se déroule donc une série d'actions. J'aimerais changer un petit truc dans cette série d'actions quand la boucle foreach arrive à la fin de l'array.
 
Comment procéder, le plus proprement (donc pas de solutions a coup de count + incrémentation d'une variable a chaque itération :D) ?
 
Merci d'avance :jap:
 
WiiDS


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 10-07-2007 à 00:26:46   

Reply

Marsh Posté le 10-07-2007 à 00:44:20    

end() ?

Reply

Marsh Posté le 10-07-2007 à 00:58:39    

Je vois pas comment l'exploiter. Surtout que quand je fais
 
foreach($xxx['tableau'] as $yyy)
 
Il m'est impossible d'accéder a $xxx['tableau'] a l'intérieur de ma dite boucle (a confirmer cependant)


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 10-07-2007 à 03:01:03    

tu devrais compter le nombre de fois que tu dois faire la boucle
if($i == ce nombre)
floc l'action change?
 
après je ne vois pas en quoi ce ne serait pas propre ..

Message cité 1 fois
Message édité par Profil supprimé le 10-07-2007 à 03:01:15
Reply

Marsh Posté le 10-07-2007 à 03:06:59    


Non mais stop les astuces de grand mère la :D
 
C'est TRES lent et non, c'est franchement pas propre :/


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 10-07-2007 à 07:48:11    

WiiDS a écrit :

Non mais stop les astuces de grand mère la :D


 
Ta grand mère est forte en développement alors, la mienne n'a pas des astuces de cette qualité.
 

WiiDS a écrit :

C'est TRES lent et non, c'est franchement pas propre :/


 
Tu te bases sur quoi pour dire que c'est "TRES lent" ? Je suis curieux de voir les résultats de ton benchmark.
 
Et si ça te plait pas, tu peux parcourir le tableau "à la main" (i.e. sans foreach) en t'arretant avant le dernier élément, puis sortir de la boucle et executer ton action sur le dernier.
 
Tu peux aussi poper le dernier élément, faire ton foreach, et remettre l'élément après.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 10-07-2007 à 09:18:50    

Code :
  1. foreach( array_slice($xxx['tableau'],0,-1) as $yyy){
  2. ...
  3. }

Reply

Marsh Posté le 10-07-2007 à 13:28:40    

cgo2 a écrit :

la mienne n'a pas des astuces de cette qualité.


thanks  
 
mais la grand-mère d'anapajari connait pas d'astuce elle connait la doc php par coeur  
 

Reply

Marsh Posté le 10-07-2007 à 14:10:48    


cela dit je ne pense pas que créer une copie de ton tableau moins ton dernier élément soit plus rapide que de faire un test sur la valeur de ton indice, hein.[:dawa]
 
Et foreach te permet d'assigner la clé, aussi, pas seulement la valeur, à chaque tour.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-07-2007 à 14:21:17    

skeye a écrit :

cela dit je ne pense pas que créer une copie de ton tableau moins ton dernier élément soit plus rapide que de faire un test sur la valeur de ton indice, hein.[:dawa]


+1, je repondais seuleument en respectant les contraintes (alakon) du départ.  
Maintenant s'il a un tableau tellement gros que la recopie de celui-ci fait ramer tout l'appli, quelque soit la méthode ça va être la misère :o.
Mais faut être honnête si j'avais eu à faire un truc comme ça, j'aurrais naturellement opté pour:

Code :
  1. for($i=0; $i<count($tableau)-1; $i++){
  2. }


skeye a écrit :

Et foreach te permet d'assigner la clé, aussi, pas seulement la valeur, à chaque tour.:o


Il est possible de préserver les clés via array_slice, c'est l'interet du dernier paramètre ;)
 
 

Reply

Marsh Posté le 10-07-2007 à 14:21:17   

Reply

Marsh Posté le 10-07-2007 à 14:24:18    

anapajari a écrit :

Mais faut être honnête si j'avais eu à faire un truc comme ça, j'aurrais naturellement opté pour:

Code :
  1. for($i=0; $i<count($tableau)-1; $i++){
  2. }



 
clairement.:D
 

anapajari a écrit :

Il est possible de préserver les clés via array_slice, c'est l'interet du dernier paramètre ;)


 
Je disais ça pour ce post:

WiiDS a écrit :

Je vois pas comment l'exploiter. Surtout que quand je fais
 
foreach($xxx['tableau'] as $yyy)
 
Il m'est impossible d'accéder a $xxx['tableau'] a l'intérieur de ma dite boucle (a confirmer cependant)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-07-2007 à 16:04:03    

anapajari a écrit :


Mais faut être honnête si j'avais eu à faire un truc comme ça, j'aurrais naturellement opté pour:

Code :
  1. for($i=0; $i<count($tableau)-1; $i++){
  2. }




Tiens je me suis toujours dit que dans une telle boucle, il valait mieux compter le nombre d'éléments du tableau avant la boucle. Le count($tableau) n'est-il pas recalculé à chaque itération avec la syntaxe que tu utilises ?

Reply

Marsh Posté le 10-07-2007 à 16:06:01    

Djebel1 a écrit :

Tiens je me suis toujours dit que dans une telle boucle, il valait mieux compter le nombre d'éléments du tableau avant la boucle. Le count($tableau) n'est-il pas recalculé à chaque itération avec la syntaxe que tu utilises ?


si l'interpréteur est très con, oui. Sinon, non. Et en interne les tableaux php stockent leur nombre d'éléments, il me semble, ce qui rend de toute manière l'opération peu couteuse.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-07-2007 à 17:58:17    

skeye a écrit :

cela dit je ne pense pas que créer une copie de ton tableau moins ton dernier élément soit plus rapide que de faire un test sur la valeur de ton indice, hein.[:dawa]
 
Et foreach te permet d'assigner la clé, aussi, pas seulement la valeur, à chaque tour.:o


Tiens, c'est pas con ca [:gratgrat]
 
A essayer , merci :jap:


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed