문제

foreach를 사용하여 연관 배열을 반복하고 있습니다.처리 중인 키 값 쌍이 마지막인지 확인하여 특별하게 처리하고 싶습니다.최선의 방법으로 이 작업을 수행할 수 있는 아이디어가 있습니까?

foreach ($kvarr as $key => $value){
   // I'd like to be able to check here if this key value pair is the last
   // so I can give it special treatment
}
도움이 되었습니까?

해결책

반복하는 동안 배열을 변경하지 않는다고 가정하면 루프에서 감소하는 카운터를 유지할 수 있으며 일단 0에 도달하면 마지막을 처리하게 됩니다.

<?php
$counter = count($kvarr);
foreach ($kvarr as $key => $value)
{
    --$counter;
    if (!$counter)
    {
        // deal with the last element
    }
}
?>

다른 팁

카운터 및 기타 '해킹'이 없으면 간단합니다.

foreach ($array as $key => $value) {

   // your stuff

   if (next($array) === false) {
      // this is the last iteration
   }
}

사용해야합니다 ===, 기능 때문에 next() 비 부금 값을 반환 할 수 있습니다 평가합니다 false, 와 같은 0 또는 ""(빈 문자열).

Foreach를 사용하여 배열을 반복 할 필요가 없으며 end (), key () 및 current () PHP 함수를 사용하여 마지막 요소에 도달하여 키 + 값을 얻을 수 있습니다.

<?php

$a = Array(
  "fruit" => "apple",
  "car" => "camaro",
  "computer" => "commodore"
);

// --- go to the last element of the array & get the key + value --- 
end($a); 
$key = key($a);
$value = current($a);

echo "Last item: ".$key." => ".$value."\n";

?>

반복에서 확인하려면 END () 함수가 여전히 유용 할 수 있습니다.

foreach ($a as $key => $value) {
    if ($value == end($a)) {
      // this is the last element
    }
}

다른 답변이 보여주기 때문에 그렇게하는 방법에는 몇 가지가 있습니다. 그러나 나는 배우라고 제안합니다 SPL 그리고 그것 캐싱 레터 레이터. 예는 다음과 같습니다.

<?php

$array = array('first', 'second', 'third');

$object = new CachingIterator(new ArrayIterator($array));
foreach($object as $value) {
    print $value;

    if (!$object->hasNext()) {
        print "<-- that was the last one";
    }
}

그것은 단순한 foreach보다 더 장점이지만 그다지 많지는 않습니다. 그리고 모든 다른 SPL 반복자들은 당신을 위해 완전히 새로운 세상을 열어줍니다. 다음은 멋진 튜토리얼입니다.

배열 포인터 트래버스 함수를 사용할 수 있습니다 (특히 next) 현재 요소에 다른 요소가 있는지 확인하기 위해 :

$value = reset($kvarr);
do
{
  $key = key($kvarr);
  // Do stuff

  if (($value = next($kvarr)) === FALSE)
  {
    // There is no next element, so this is the last one.
  }
}
while ($value !== FALSE)

배열에 값이있는 요소가 포함되어 있으면이 메소드에 작동하지 않습니다. FALSE, 그리고 일반적인 루프 본체를 수행 한 후 마지막 요소를 처리해야합니다 (배열 포인터가 호출하여 발전되기 때문에 next) 또는 그렇지 않으면 값을 메모하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top