2010-10-14 3 views
0

J'ai écrit cette logique qui boucle sur un tableau dans <li>aide nécessaire d'améliorer une boucle foreach

et donne # 1 et tous les 5 une classe de « alpha ».

$count = 0; 

     foreach($gallery->data as $row){ 

      if ($count==0 || $count%4==0) { 
       echo '<li class="alpha"></li>'.PHP_EOL; 
      } else { 
       echo '<li></li>'.PHP_EOL; 
      } 

      $count++; 
     } 

je dois ajouter à cela et obtenir le code en ajoutant une classe de « oméga » à tous les 4 <li>

+1

Vous n'avez pas besoin de 'if $ count == 0'. La deuxième partie de l'instruction if ajoutera déjà 'alpha' au premier élément à l'index 0. – meagar

Répondre

0

vous vous rendez compte que vous décrivez, il y aura un certain chevauchement droit? (exemple - l'item 30 est à la fois un '5ème' et un '6ème') Brian vous a donné une réponse pour exactement ce que vous avez décrit, mais je ne suis pas sûr que ce soit ce que vous voulez. Vous voulez ALPHA, x, x, x, OMEGA, ALPHA, x, x, x, OMEGA, ALPHA .....

Vous semblez vouloir Alpha sur le 5 * k + 1, et Omega sur 5 * k

conditions:
alpha - ($ count + 1)% 5 == 1
oméga - ($ count + 1)% 5 == 0

Je pense que le regroupement en outre fait cela plus facile pour comprendre, puisque vous comptez commence à 0 mais vous semblez penser en termes de début à 1. Si vous n'aimez pas cela, perdez l'addition et changez les équivalences à 0 et 4, respectivement - $ count% 5 == 0 et $ count% 5 == 4

Je sais que cela est mieux adapté pour un commentaire sous la dernière réponse, mais je ne vois pas comment. Est-ce que je ne suis pas autorisé jusqu'à ce que ma réputation soit plus élevée ou est-ce que je manque quelque chose?>

+0

Merci pour votre contribution Jon, cela semble avoir fait l'affaire! – Plasticated

+0

pas de problème.Je suis content que je puisse aider, et je suis juste pompé pour avoir ma première réponse approuvée hah –

0

en ce moment tel qu'il est votre code ajoute la classe « alpha » à chaque quatrième élément commençant par le premier, pas tous les cinquièmes. En d'autres termes, les éléments 1, 5, 9, 13, etc. auront une classe "alpha" puisque votre compteur commence à 0.

Je suppose que vous voulez ajouter la classe "omega" puis aux éléments 4 , 8, 12, etc. Voici ce que vous devez faire:

$count = 0; 

    foreach($gallery->data as $row){ 

     if ($count%4==0) { 
      echo '<li class="alpha"></li>'.PHP_EOL; 
     } 
     else if ($count%4==3) { 
      echo '<li class="omega"></li>'.PHP_EOL; 
     } 
     else { 
      echo '<li></li>'.PHP_EOL; 
     } 

     $count++; 
    } 
+0

C'est exactement le cas. Désolé, je pense que je me suis mélangé moi-même! – Plasticated

+0

Donc, je peux mieux comprendre comment cela fonctionne, pouvez-vous expliquer ce que je voudrais changer pour ajuster l'ordre. Par exemple: alpha sur # 1 et tous les 6, et oméga sur tous les 5? – Plasticated

+1

L'opérateur% vous donne le reste de a divisé par b lorsque vous avez l'expression a% b. Dans votre cas, vous utilisez la valeur obtenue à partir de $ count% 4 comme décalage dans un regroupement, où le premier élément apparaît lorsque $ count% 4 = 0 et le dernier élément apparaît où $ count% 4 = 3. Si vous le souhaitez Pour modifier la taille de votre groupe tout en conservant la première/dernière relation pour une taille de groupe arbitraire N, le premier élément se produit où $ count% N = 0 et le dernier élément se produit où $ count% N = N-1. –