2010-12-12 83 views
1

我正在使用SimplePie,我無法弄清楚如何輸出計數或循環的鍵值。輸出一個foreach函數的計數

不應該在該

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

,或者這

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

是輸出爲每一個唯一的號碼?

uniqid()在這種情況下不起作用,因爲我在頁面上運行循環兩次,並試圖根據ID匹配一個元素列表和另一個元素列表。

回答

3

as一起使用的單個參數被解釋爲存儲而非密鑰的變量。如果你想關鍵,你需要使用=>的方式如下所示:

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

一點題外話,你對數組中的一個項目使用key()count(),而不是陣列作爲一個整體,這是無效的。據我所知,即使應用於整個陣列,也不能保證key()將按照您的預期工作。它是用於控制迭代的循環,與next一樣。

+1

完全正確,除了你給出關於key(​​)的建議似乎有點混亂。 OP使用key()的方式不僅會產生意想不到的結果,而且會出錯。 – 2010-12-12 09:13:21

+0

@Mike Sherov良好的捕獲,我沒有注意到它使用'$ item'。答案已更新。 – 2010-12-12 09:15:38

+0

我明白了,謝謝你的解釋。我想拋出我的是key()和count()接受一個數組作爲參數。我認爲$ item是我的數組,但我想我沒有將它定義爲 - 正確的? – jaasum 2010-12-12 09:17:29

2

要在foreach中獲得'count',您需要一個額外的變量。如果數組按索引而不是關聯索引,那麼獲得關鍵碼很容易,而且相同。下面是一個例子,包括兩種:

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

鍵($項目),你使用上面,因爲你正在試圖獲得不再與原始數組相關的值的鍵不起作用。 count($ item)是子數組$ item的數量。

+0

這會是這樣,它從1開始,而不是0? – jaasum 2010-12-12 09:15:53

+0

$我仍然從0開始。如果你這樣選擇的話,數組可以用索引'索引'。查看更新的示例。 – evan 2010-12-12 09:17:38

+0

謝謝!這非常有幫助。 – jaasum 2010-12-12 09:27:19

0

可以使用get_id()方法

,如:

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