2011-07-21 1 views
1

Je suis très nouveau en PHP, et je voudrais faire une boucle foreach qui ne répètera pas un résultat si le même élément a déjà été sorti.si un seul mot est déjà sorti, continuer

Voici mon code:

foreach ($attachments as $id => $attachment) { 
     echo ($attachment->post_title); 
    } 

Comme vous pouvez le voir, le mot serait tiré par echo ($attachment->post_title);.

Existe-t-il un moyen de vérifier et d'éviter les doublons?

Un grand merci pour votre aide.

Répondre

2
$outputted = array(); 

foreach($attachments as $id => $attachment) { 
    if (!isset($outputted[$attachment->post_title])) { 
     echo $attachment->post_title; 
     $outputted[$attachment->post_title] = true; 
    } 
} 
+0

+1 pour les doigts plus rapides :( – genesis

+0

juste eu une pensée, un malin, si vous avez attribué la valeur à FALSE au lieu de TRUE? Il fonctionne encore ici, mais il pourrait TOTALEMENT introduire un comportement inattendu. – cwallenpoole

+0

Peu importe ce qui est affecté, tant que quelque chose est affecté. Je teste l'existence de la clé (le titre du poste). –

0
foreach ($attachments as $id => $attachment) { 

     if (!isset($outputs[$attachment->post_title])){ 
      $outputs[$attachment->post_title] = true; 
      echo ($attachment->post_title); 
     } 
} 
0

vous pouvez faire:

$output = array(); 

foreach ($attachments as $id => $attachment) { 
    if (!isset($output[$attachment->post_title])){ 
     echo ($attachment->post_title); 
     $output[$attachment->post_title] = true; 
    } 
} 
0

utiliser ces tableaux:

$used = array(); 
foreach ($attachments as $id => $attachment) { 
    if (!array_key_exists($attachment->post_title, $used)) { 
     $used[$attachment->post_title] = 1; 
     echo $attachment->post_title; 
    } 
} 
0

Peut-être quelque chose comme ça?

foreach ($attachments as $id => $attachment) { 
    $attachments_posted[] = $attachment; 
    if (!array_search($attachment, $attachments_posted)) 
     echo ($attachment->post_title); 
} 
0

Utilisez un tableau pour garder une trace des titres que vous avez déjà vu:

$seen = array(); 
foreach ($attachments as $id => $attachment) { 
    if (array_key_exists($attachment->post_title, $seen)) { 
     continue; 
    } 
    $seen[$attachment->post_title] = true; 
    echo $attachment->post_title; 
} 
2

Vous pouvez utiliser array_unique comme Rajesh a suggéré et vous inquiétez pas avec un tableau faisant supplémentaire.

foreach (array_unique($attachments) as $id => $attachment) { 
     echo ($attachment->post_title); 
} 
Questions connexes