开发者

Outputting the count in a foreach function

开发者 https://www.devze.com 2023-01-29 22:45 出处:网络
I am working with SimplePie and I cannot figure out how to output the count, or the key values for the loop.

I am working with SimplePie and I cannot figure out how to output the count, or the key values for the loop.

Shouldn't this

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

, or this

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

be outputting a unique number for each?

uniqid() Doesn't work in this case, because I am running the loop twice on the page and trying to ma开发者_运维知识库tch up one list of elements with another based on ID.


A single argument used with as is interpreted as a variable in which to store the value, not the key. If you want the key, you need to use => in a manner like the following:

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

As a sidenote, you're using key() and count() on an item in the array, rather than the array as a whole, which is invalid. As far as I'm aware, there's no guarantee that key() will work as you expect even if applied to the whole array. It's meant for loops where you control the iteration, as with next.


To get the 'count' in a foreach you would need an extra variable. Getting the key is easy and the same if the array is indexed in order instead of associative. Here is an example including both:

$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++;
}

key($item) that you're using above doesn't work because you're trying to get the key of a value that no longer is associated with the original array. count($item) is the count of a subarray $item.


you can use get_id() method

like :

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!";
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消