2010-12-12 3 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 기반의 다른 요소와 비교하기 때문에 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!"; 
    } 
}