2010-10-25 10 views
3

J'ai un foreach qui ressemble à ceci:Foreach, un traitement spécial de chaque nième élément (impair, même par exemple)

      foreach ($blogusers as $bloguser) { 
         $args = array(
         'author' => $bloguser->user_id, 
          'showposts' => 1, 
          'caller_get_posts' => 1 
         ); 
         $my_query = new WP_Query($args); 
         if($my_query->have_posts()) { 
          $user = get_userdata($bloguser->user_id); 
          userphoto($bloguser->user_id, "<div class='all_authors'><a href='http://blogg.nacka.se/nastasteg/author/".$user->user_login . "'>","</a><ul><li><a href='http://blogg.nacka.se/nastasteg/author/".$user->user_login . "'>" .$user->user_firstname."</a></li><li class='occupation'>".$user->user_lastname."</li></ul></div>", array('width' => 135, 'height' => 135)); 
          #echo "<div class='all_authors'><a href='http://blogg.nacka.se/nastasteg/author/".$user->user_login . "'><img src='http://www.gravatar.com/avatar/" . md5(strtolower(trim(" $user->user_email ")))."?s=135' /></a><ul><li><a href='http://blogg.nacka.se/nastasteg/author/".$user->user_login . "'>" .$user->user_firstname."</a></li><li class='occupation'>".$user->user_lastname."</li></ul></div>"; 
         } 
         } 

Dans tous les Foth div, voudrais ajouter une classe supplémentaire. Comment puis-je faire cela?

Répondre

12

Utilisez l'opérateur de module. Je vois m'a battu @ Alex à la marque avec cela, mais je vous offre ce code je l'ai écrit et testé, afin que les autres puissent voir plus clairement le principe:

$blogusers=array('a','b','c','d','e','f','g','h','i','j'); 
$i=0; 
foreach ($blogusers as $bloguser) { 
    if($i % 4 === 0) $extraclass= "fourthClass"; 
    $resultHTML .= "<div class=\"standardClass $extraclass\">$bloguser</div>"; 
    $i++; 
    $extraclass=""; 
} 
echo $resultHTML; 

pourrait être rendu plus compact avec l'opérateur ternaire, mais c'est le principe.

7

Créez une variable avant que votre foreach appelle $ i et définissez-la sur 0;

A l'intérieur vous utilisez foreach

$class = ($i%4 === 0) ? 'yourclass' : '';

$class est maintenant soit 'YourClass' ou une chaîne vide

Puis à la fin de votre incrément de foreach $i avec $i++

+1

+1 pour l'utilisation de l'opérateur de module –

0

Je regarderais à la création d'une variable locale avant la boucle, l'incrémentation à chaque itération de boucle, sur l'itération de boucle significative effectuer des actions et réinitialiser à 0

0

Ajouter éventuellement un contre?

$counter = ""; 
foreach($array AS $variable){ 
    $counter +=1; 
    // Here you will do your standard stuff you do always 
    if($counter == 4){ // check for right counter value 
    $counter = ""; // null the counter again 
    // HERE you can do stuff that only happens every 4th iteration 
    } 
    // HERE you can carry on with your usual stuff that happens always 
} 

Bien sûr, il y a plusieurs façons de le faire, c'est à mes yeux le plus simple.

+0

Peut être une bête de somme, mais '" "! == NULL'. si c'est un compteur qui le met à "0" est plus approprié. Cela fonctionnera bien sûr, pas question à ce sujet. – Wrikken

+0

Vous avez raison. Je sais que c'est un peu sale :) J'ai tendance à le faire parce que pour une raison quelconque, en parcourant mon code plus tard, voir "" est un peu plus facile pour moi de trouver que 0. Je suppose que je devrais essayer d'être "nettoyeur" le moins ici en aidant d'autres personnes;) Merci de me le rappeler. – nana