source

배열 반복 중 현재 요소가 마지막 요소인지 확인하는 중

gigabyte 2022. 10. 1. 21:19
반응형

배열 반복 중 현재 요소가 마지막 요소인지 확인하는 중

이 의사 코드를 실제 php 코드로 변환하는 것을 도와주세요.

 foreach ($arr as $k => $v)
    if ( THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
        doSomething();

편집: 어레이에 숫자 키 또는 문자열 키가 있을 수 있습니다.

PHP의 end()를 사용할 수 있습니다.

$array = array('a' => 1,'b' => 2,'c' => 3);
$lastElement = end($array);
foreach($array as $k => $v) {
    echo $v . '<br/>';
    if($v == $lastElement) {
         // 'you can do something here as this condition states it just entered last element of an array'; 
    }
}

갱신 1

@Mijoja가 지적한 바와 같이 어레이에 같은 값이 여러 번 포함되어 있으면 위의 문제가 발생할 수 있습니다.다음은 이 문제를 해결하는 방법입니다.

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
//point to end of the array
end($array);
//fetch key of the last element of the array.
$lastElementKey = key($array);
//iterate the array
foreach($array as $k => $v) {
    if($k == $lastElementKey) {
        //during array iteration this condition states the last element.
    }
}

갱신 2

@onteria_의 솔루션은 어레이의 내부 포인터를 변경하지 않기 때문에 답변보다 낫다는 것을 알게 되었습니다.그 답변에 맞추어 답변을 갱신하고 있습니다.

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
// Get array keys
$arrayKeys = array_keys($array);
// Fetch last array key
$lastArrayKey = array_pop($arrayKeys);
//iterate array
foreach($array as $k => $v) {
    if($k == $lastArrayKey) {
        //during array iteration this condition states the last element.
    }
}

감사합니다 @onteria_

갱신 3

@CGundlach PHP 7.3이 소개한 바와 같이array_key_lastPHP > = 7.3을 사용하는 경우 이 옵션이 훨씬 더 나은 것 같습니다.

$array = array('a' => 1,'b' => 2,'c' => 3);
$lastKey = array_key_last($array);
foreach($array as $k => $v) {
    echo $v . '<br/>';
    if($k == $lastKey) {
         // 'you can do something here as this condition states it just entered last element of an array'; 
    }
}

이건 항상 나한테 효과가 있어

foreach($array as $key => $value) {
   if (end(array_keys($array)) == $key)
       // Last key reached
}

15년 4월 30일 편집

$last_key = end(array_keys($array));
reset($array);

foreach($array as $key => $value) {
  if ( $key == $last_key)
      // Last key reached
}

@Warren Sergent가 언급한E_STRICT 경고를 회피하려면

$array_keys = array_keys($array);
$last_key = end($array_keys);
$myarray = array(
  'test1' => 'foo',
  'test2' => 'bar',
  'test3' => 'baz',
  'test4' => 'waldo'
);

$myarray2 = array(
'foo',
'bar',
'baz',
'waldo'
);

// Get the last array_key
$last = array_pop(array_keys($myarray));
foreach($myarray as $key => $value) {
  if($key != $last) {
    echo "$key -> $value\n";
  }
}

// Get the last array_key
$last = array_pop(array_keys($myarray2));
foreach($myarray2 as $key => $value) {
  if($key != $last) {
    echo "$key -> $value\n";
  }
}

부터array_pop에 의해 작성된 임시 어레이에서 동작합니다.array_keys원래 어레이는 전혀 수정되지 않습니다.

$ php test.php
test1 -> foo
test2 -> bar
test3 -> baz
0 -> foo
1 -> bar
2 -> baz

왜 이렇게 간단한 방법이 아닐까요?

$i = 0; //a counter to track which element we are at
foreach($array as $index => $value) {
    $i++;
    if( $i == sizeof($array) ){
        //we are at the last element of the array
    }
}

SPL 리터레이터를 사용하는 것은 오래된 방법이라는 것은 알고 있습니다만, 어쨌든 또 다른 해결책이 있습니다.

$ary = array(1, 2, 3, 4, 'last');
$ary = new ArrayIterator($ary);
$ary = new CachingIterator($ary);
foreach ($ary as $each) {
    if (!$ary->hasNext()) { // we chain ArrayIterator and CachingIterator
                            // just to use this `hasNext()` method to see
                            // if this is the last element
       echo $each;
    }
}

제 해결책은 아주 간단합니다.

$array = [...];
$last = count($array) - 1;

foreach($array as $index => $value) 
{
     if($index == $last)
        // this is last array
     else
        // this is not last array
}

항목이 숫자로 정렬된 경우 key() 함수를 사용하여 현재 항목의 인덱스를 확인하고 길이와 비교합니다.for 루프 대신 next() 또는 prev()를 사용하여 while loop 내의 항목을 사이클링해야 합니다.

$length = sizeOf($arr);
while (key(current($arr)) != $length-1) {
    $v = current($arr); doSomething($v); //do something if not the last item
    next($myArray); //set pointer to next item
}

를 사용한 심플한 어프로치array_keys키를 취득하고 첫 번째 만 취득하는 기능[0]리버스 배열의 마지막 키입니다.

$array = array('a' => 1,'b' => 2,'c' => 3);
$last_key = array_keys(array_reverse($array, true))[0];
foreach($array as $key => $value) {
   if ($last_key !== $key)
       // THIS IS NOT THE LAST ELEMENT IN THE ARRAY doSomething();
}

주의:array_reversereverse array는 배열을 반전시키고 키의 순서를 유지하기 위해 첫 번째 배열을 반전시키고 두 번째 매개 변수를 true로 합니다.

언급URL : https://stackoverflow.com/questions/6092054/checking-during-array-iteration-if-the-current-element-is-the-last-element

반응형