2010-12-12 20 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()この例では、ページ上でループを2回実行していて、IDに基づいて別の要素のリストを一致させるため、uniqid()は機能しません。

答えて

3

asで使用される単一の引数は、キーではなくを格納する変数として解釈されます。あなたがキーをしたい場合は、次のような方法で=>を使用する必要があります。追記として

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

、あなたではなく、全体としてのアレイよりも、配列内のアイテムにkey()count()を使用しています無効です。私が知る限り、key()が配列全体に適用されても期待通りに動作するという保証はありません。 nextのように、反復を制御するループを意味します。

+1

'key()'についてのアドバイスはちょっと混乱しているようですが、完全に正しいです。 OPがkey()を使用する方法は、予期しない結果をもたらすだけでなく、間違っています。 –

+0

@Mike Sherov良いキャッチ、私はそれが '$ item'を使用していたことに気付かなかった。回答が更新されました。 –

+0

私はそれを説明してくれてありがとう、参照してください。私は何が私を捨てていたかは、key()とcount()が配列を引数として受け入れることだと思います。私は$ itemが私の配列だと思ったが、私はそれを正しいと定義していなかったと思う - 正しい? – jaasum

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

+0

$ iはまだ0から始まります。あなたが選んだ場合、配列は単語で '索引付け'されます。更新された例を参照してください。 – evan

+0

ありがとう!これは非常に役に立ちます。 – jaasum

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!"; 
    } 
} 
関連する問題