2010-12-12 13 views
1

Je travaille avec SimplePie et je n'arrive pas à comprendre comment afficher le nombre ou les valeurs clés de la boucle.Sortie du comptage dans une fonction foreach

Si pas

<?php foreach ($feed->get_items() as $item): ?> 
     <?php 
       $i = key($item); 
       echo $i; 
     ?> 
<?php endforeach; ?> 

, ou ce

<?php foreach ($feed->get_items() as $item): ?> 
     <?php 
       $i = count($item); 
       echo $i; 
     ?> 
<?php endforeach; ?> 

être fournir un numéro unique pour chaque? Uniqid() Ne fonctionne pas dans ce cas, car j'exécute la boucle deux fois sur la page et essaie de faire correspondre une liste d'éléments avec une autre en fonction de l'ID.

Répondre

3

Un seul argument utilisé avec as est interprété comme une variable dans laquelle stocker la valeur , pas la clé. Si vous voulez la clé, vous devez utiliser => d'une manière comme ce qui suit:

foreach ($feed->get_items() as $key => $item): 
    echo $key; 
endforeach 

En tant que sidenote, vous utilisez key() et count() sur un élément du tableau, plutôt que le tableau dans son ensemble , qui est invalide. Pour autant que je sache, il n'y a aucune garantie que key() fonctionnera comme prévu, même s'il est appliqué à l'ensemble du tableau. Il est destiné aux boucles où vous contrôlez l'itération, comme avec next.

+1

Complètement à droite, sauf que le conseil que vous donnez sur 'key()' semble un peu confus. La façon dont l'OP utilise key() ne produira pas seulement des résultats inattendus, c'est faux. –

+0

@Mike Sherov Bonne prise, je n'ai pas remarqué qu'il utilisait '$ item'. Réponse mise à jour –

+0

Je vois, merci d'expliquer cela. Je suppose que ce qui me rejetait, c'est que key() et count() acceptent un tableau comme argument. Je pensais que $ item était mon tableau, mais je suppose que je ne l'avais pas défini comme tel - correct? – jaasum

2

Pour obtenir le 'count' dans un foreach vous auriez besoin d'une variable supplémentaire. Obtenir la clé est facile et la même chose si le tableau est indexé dans l'ordre au lieu de l'associatif. Voici un exemple comprenant à la fois:

$array = array(
    'foo' => 'bar' 
); 

$i = 0; 
foreach ($array as $key => $value) 
{ 
    /* 
     code where $i is the 'count' (index) and $key is the associative $key. 
    */ 
    /* $i == 0 */ 
    /* $key == 'foo' */ 
    /* $value == 'bar' */ 
    $i++; 
} 
clé

($ item) que vous utilisez ne fonctionne pas au-dessus parce que vous essayez d'obtenir la clé d'une valeur qui ne l'est plus associée au tableau original . count ($ item) est le nombre d'un élément subarray $.

+0

Serait-ce pour qu'il commence à 1 au lieu de 0? – jaasum

+0

$ Je commence toujours à 0. Le tableau pourrait être 'indexé' avec des mots si vous le souhaitez. Voir l'exemple mis à jour. – evan

+0

Merci! C'est très utile. – jaasum

0

vous pouvez utiliser la méthode get_id()

comme:

foreach ($feed->get_items() as $item) 
{ 
    $prev_ids = array('guid1', 'guid2', 'guid3', 'guid4'); 
    if (in_array($item->get_id(true), $prev_ids)) 
    { 
     echo "This item is already stored."; 
    } 
    else 
    { 
     echo "This is a new item!"; 
    } 
}