Foreach{} else{} - Une mannière de le faire ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Foreach{} else{} - Une mannière de le faire ?

par Ryle » 10 juil. 2006, 11:18

La solution de titerm qui proposait également un flag semble être passée innaperçue, elle revient au même et me semble plus propre au niveau de la déclaration du flag :)

Pour le code "propre et simple" cela n'a rien à voir avec le nombre de lignes. On peut te faire tenir celui de sadeq (qui est non seulement propre mais en plus rigoureux puisqu'il ne rentre pas dans le foreach s'il n'a pas de tableau) en une seule ligne ;)
Et sans aller jusque là, si tu mets les acolades en bout de lignes, il n'en fait que 9. J'espère tout de même que tu n'es pas à 5 lignes et une variable près :)

Un code "propre et simple" doit pouvoir être facilement compris par d'autres et à mon avis c'est pas en tassant tout sur quelques lignes que l'on peut obtenir un tel résultat :)

rami >> tiens, ça fait plaisir des gens qui connaissent la différence entre au temps et autant :)

par rami » 09 juil. 2006, 13:09

Oui exact? Au temps pour moi.
Il suffirait de définir une valeur dans $nouvelle_variable ( 1 par exemple).

par Cyrano » 09 juil. 2006, 12:52

Hum hum... si tu initialises comme ceci:
$nouvelle_variable = null;
Le if qui suit sera toujours exécuté.

Pour que ton truc fonctionne, il faudra soit rajouter une ligne avant la boucle donnant une valeur non nulle à ta variable et dans ce cas elle sera annulée si on rentre dans la boucle, ou alors, dans la boucle, il faudrait donner une valeur non nulle à cette même variable directement.

par rami » 09 juil. 2006, 12:34

Un code propre et simple... c'est ma mannière de faire.
Un code propre signifie justement ne pas employer de "bidouille".

Autrement, un code pas très propre qui te permettrait de limiter le nombre de lignes :
//mon tableau résultat
$resultat = $db->my_exec('nom_de_la_requete_sql');

//Lire le résultat
foreach ((array) $resultat as $row )
{
    $nouvelle_variable = null;
    echo "Je suis $row[name]";
}

if(!isset($nouvelle_variable))
{
    //message
    echo "Le résultat est vide";
}
Premièremenent, on caste $resultat pour ne pas avoir d'erreur si la requête n'a rien retourné. Ensuite, dans la boucle on initialise une nouvelle variable. Donc si après la boucle, la variable n'existe pas, c'est qu'aucun résultat n'a été retourné.

par Cyrano » 09 juil. 2006, 08:56

Un code propre et simple... c'est ma mannière de faire.
Je me demande dans cette optique ce qu'on pourrait bien reprocher à l'exemple montré par Sadeq : ok il a 12 lignes, et alors ? C'est clair, sans fioritures et d'une simplicité extrême. Est-ce que ce n'est pas le but recherché.

Je crois que s'il convient effectivement d'éviter les lignes inutiles, il ne faut pas non plus tout sacrifier pour réduire la longueur et il me semble important de faire un compromis entre longueur et simplicité :-k

par Ultiny » 09 juil. 2006, 08:48

Un code propre et simple... c'est ma mannière de faire.

par rami » 08 juil. 2006, 12:31

Je ne vois pas ce qui gêne d'avoir quelques lignes en plus. Si pour gagner, quelques lignes, tu dois faire des bidouilles, je ne vois vraiment pas l'intérêt.

par Ultiny » 08 juil. 2006, 11:40

12 lignes de code contre 4 :-s

Je n'ai pas envie de mettre mon appel de method dans une variable de plus.
Je pensais soit décortiquer le foreach avec un while et list... ou utiliser un try catch.

Peut-être y'a t-il mieu?

par sadeq » 06 juil. 2006, 09:26

Ta méthode est une fonction qui retourne un tableau, et comme a déjà dit Cyrano il faut se baser sur le nombre de lignes du tableau résultat pour faire le foreach ou envoyer le message.

Pour ce faire, il faut exécuter ta requête avant de faire le foreach :
//mon tableau résultat
$resultat = $db->my_exec('nom_de_la_requete_sql');

//traiter le résultat s'il y a des lignes
if (count($resultat)>0)
{
   //Lire le résultat
   foreach ( $resultat as $row ) 
  { 
      echo "Je suis $row[name]"; 
   }
}
else 
{
    //message
    echo "Le résultat est vide";
}

par titerm » 06 juil. 2006, 07:59

$flag = true;
foreach(blabla) {
$flag = false;
Je traite ma_ligne
}

if(flag) {
J'indique qu'il n'y a pas de résultats
}

par Ultiny » 06 juil. 2006, 07:56

Mmh, je peux pas :cry: sinon je fais 2 fois la requete SQL.

Il doit bien y avoir un autre moyen nan ?

par Cyrano » 06 juil. 2006, 07:39

Fais un count() sur ton tableau avant le foreach et n'exécute ce dernier que si le résultat est supérieur à 0.

Foreach{} else{} - Une mannière de le faire ?

par Ultiny » 06 juil. 2006, 06:50

Bonjour,

J'ai une question pour vous chers amis du PHP,
Je voudrais réaliser un else sur mon foreach au cas ou aucun tour dans le foreach ne serait executé (dans le cas d'un tableau donnée en entrée sans aucune valeur).

Ma ressource est un tableau associatif image d'une réponse SQL, composée de lignes, puis de champs dans ces lignes :

row[0][id] = 1
row[0][name] = Romain
row[1][id] = 1
row[1][name] = Adrien

Je voudrais simplement, dans le cas d'aucune valeur retournée par ma fonction SQL $db->my_exec() ( équivalent à un array() ) pouvoir afficher un message du type 'Aucun résultat'.

La méthode revée serait :

foreach (mon_resultat as ma_ligne)
{
Je traite ma_ligne
}
else
{
J'indique qu'il n'y a pas de résultats
}

Merci pour votre aide.

PS, je ne peux pas toucher à la source, elle vient de ma classe $db->my_exec() et je ne peux y refaire appel pour ne pas relancer une requete.

Ma methode me permets d'avoir juste cette ligne quand j'ai besoin d'une requete :

foreach ($db->my_exec('nom_de_la_requete_sql') as $row)
{
echo('Je suis '.$row['name']);
}

Les requetes sont centralisées dans un fichier.