Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/11/2011, 18h57   #1
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
Par défaut limiter les résultats "foreach"

bonjour à tous,

voici mon code :

Code :
1
2
3
4
5
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = explode(", ", $mots);
foreach ($mots as $mots){
echo $mots;
}
Ma question est simple : comment puis-je limiter l'affichage à 3 mots max ?

Ce qui fait que le echo me donnerait : mot1 mot2 mot3
et c'est tout !

Merci bcp de votre aide
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 19h05   #2
Membre actif
 
Inscription : janvier 2008
Messages : 170
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2008
Messages : 170
Points : 175
Points : 175
Envoyer un message via MSN à numew
peut être simplement avec un compteur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = explode(", ", $mots);
$i=0;
foreach ($mots as $mots){
echo $mots;
$i++;
if($i>=2)
{
break;
}
}
__________________
Portfolio - Instant gagnant - vidéos cool
numew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 19h11   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Code :
1
2
3
4
5
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = explode(", ", $mots);
foreach ($mots as $mots){
echo $mots;
}
En panne d'inspiration pour les noms de variables ?

Sinon, regarde du coté de array_ slice
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 09h49   #4
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 248
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 248
Points : 1 506
Points : 1 506
Salut,

je ne preconise pas la solution de numew.

meme si elle fonctionnerait, il faut eviter les break et les continue.

si tu dois utiliser break ou continue, c'est que ton algo a ete mal pense.
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est actuellement connecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/11/2011, 10h59   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Il y a aussi while() qui fonctionne très bien :
Code :
1
2
3
4
5
6
7
 
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = explode(", ", $mots);
$i = -1;
while(++$i < 3) {
   echo $mots[$i];
}
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 12h51   #6
Membre régulier
 
Homme Abdelilah amezghal
Développeur informatique
Inscription : février 2006
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Abdelilah amezghal

Informations professionnelles :
Activité : Développeur informatique
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : février 2006
Messages : 56
Points : 95
Points : 95
salut,
Je suis curieux de savoir pourquoi il faut éviter les "break" et les "continue".
comme si array_slice en interne ne va pas boucler...

Des fois on ne sait pas quand on doit quitter une boucle, par exemple ça dépends de la réponse d'un appel asynchrone (sockets, curl..)

Mais de dire que utiliser break/continue == algorithme mal conçu
je trouve ça exagéré. cet exemple n'est pas parlant, mais ta remarque non plus
amezghal est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 14h21   #7
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 248
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 248
Points : 1 506
Points : 1 506
Citation:
Envoyé par amezghal Voir le message
Des fois on ne sait pas quand on doit quitter une boucle
faux : tu fais bien boucle() { if(quelquechose) { break/continue; }}donc, tu fais un test pour quitter/continuer ta boucle... donc tu sais "quand"

apres, faire :
Code php :
1
2
3
4
5
foreach($array as $key => $value) {
if($key==3) {
break;
}
}
n'est pas correct car ca va a l'encontre du but du foreach (qui est de parcourir l'integralite d'un array)
tu pourrais donc passer par for($i=0;$i<=3;$i++) { }ou $i=0; while($i<=3) { $i++; }
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 15h58   #8
Membre régulier
 
Homme Abdelilah amezghal
Développeur informatique
Inscription : février 2006
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Abdelilah amezghal

Informations professionnelles :
Activité : Développeur informatique
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : février 2006
Messages : 56
Points : 95
Points : 95
Moi je parle pas juste du foreach
foreach est un iterator. mais toi tu as dit que si tu dois utiliser "break" ou "continue" c'est que l'algo est mal conçu.
Or "break" et "continue" c'est pour while, foreach, et for.
et même pour foreach: imagine qu'on récupére les items dynamiquement, et que tu as un array cle/valeur (et pas index/valeur) et que on doit pas traiter certains type de données. on doit juste ignorer cet item ba on fait "continue"...

mais toi tu as généraliser, et je ne suis pas d'accord

mais sinon pour "maxence64" il peut juste faire unset($mots[4]), et faire ca boucle foreach...c'est une solution aussi
amezghal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h28   #9
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 248
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 248
Points : 1 506
Points : 1 506
bah non.. tu n'es pas oblige d'utiliser break pour un while !?

Code php :
1
2
3
4
5
6
7
$flag = true;
while($flag) {
 //du code
 if(quelque chose) {
 $flag = false;
 }
}
et sinon.. j'ai pris les boucles pour justifier mon point de vue car a part dans des boucles, je ne vois pas a quel moment on pourrait les utiliser...

sinon, si tu ne dois pas traiter tel type de donnees, tu peux faire ainsi :
Code php :
1
2
3
4
5
for() {
 if(type == quelque chose) {
  //traitement
 }
}
le meme code avec continue serait :
Code php :
1
2
3
4
5
for() {
 if(type != quelque chose) {
  continue;
 }
}

pour essayer de faire une comparaison, je dirait que c'est comme si tu roulais en voiture avec des pneus neige en plein ete... ca roule, mais c'est pas le top
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h47   #10
Membre régulier
 
Homme Abdelilah amezghal
Développeur informatique
Inscription : février 2006
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Abdelilah amezghal

Informations professionnelles :
Activité : Développeur informatique
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : février 2006
Messages : 56
Points : 95
Points : 95
Tu donnes des alternatives, mais tu expliques pas en quoi utiliser "break/continue" == code mal conçu.
j'imagine que pour les switch ou tu es obligé de faire "break"
tu va me dire bah non
tu peux faire if...elseif...elseif...elseif else.

et sinon si tu as une boucle dans une boucle dans une boucle
et que suivant un cas dans la 3eme boucle tu veux quitter direct les boucles.
ba tu va faire break 3;

mais si tu tu essayes de switcher des flags, tu es obliger de terminer la 3eme boucle + 2eme boucle pour que le enfin la première boucle arrête
amezghal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h54   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 134
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 134
Points : 8 496
Points : 8 496
utilise LimitIterator et on en parle plus

Code :
1
2
3
4
5
6
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = new ArrayIterator(explode(", ", $mots));
 
foreach(new LimitIterator($mots, 0, 3) as $mots){
    echo $mots;
}
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 23h27   #12
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 248
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 248
Points : 1 506
Points : 1 506
Citation:
Envoyé par amezghal Voir le message
j'imagine que pour les switch ou tu es obligé de faire "break"
bah oui, on n'a pas trop le choix... c'est la syntaxe d'un switch

Citation:
Envoyé par amezghal Voir le message
et sinon si tu as une boucle dans une boucle dans une boucle
et que suivant un cas dans la 3eme boucle tu veux quitter direct les boucles.
ba tu va faire break 3;
pareil, j'ai envis de dire qu'au dela de 2 niveau (une boucle dans une boucle), il faut revoir l'algo...
mais pareil je sens que je vais avoir du mal a expliquer mon point de vue la dessus par ecrit...
comme l'a suggere stealth35, tu as eu plusieurs solutions, n'en parlons plus
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 19h27   #13
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
Citation:
Envoyé par stealth35 Voir le message
utilise LimitIterator et on en parle plus

Code :
1
2
3
4
5
6
$mots = 'mot1, mot2, mot3, mot4, mot5';
$mots = new ArrayIterator(explode(", ", $mots));
 
foreach(new LimitIterator($mots, 0, 3) as $mots){
    echo $mots;
}
ha bah voilà !

merci
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 14h57   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 134
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 134
Points : 8 496
Points : 8 496
Citation:
Envoyé par maxence64 Voir le message
ha bah voilà !

merci
oui enfin Bovino t'avait déjà donner la réponse avec le array_slice
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h19.


 
 
 
 
Partenaires

Hébergement Web