배열 반복 중 현재 요소가 마지막 요소인지 확인하는 중
이 의사 코드를 실제 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_last
PHP > = 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_reverse
reverse array는 배열을 반전시키고 키의 순서를 유지하기 위해 첫 번째 배열을 반전시키고 두 번째 매개 변수를 true로 합니다.
언급URL : https://stackoverflow.com/questions/6092054/checking-during-array-iteration-if-the-current-element-is-the-last-element
'source' 카테고리의 다른 글
벤더의 규모를 초과 (0) | 2022.10.01 |
---|---|
수업의 모든 메서드를 특정 코드 블록으로 시작하는 우아한 방법이 있을까요? (0) | 2022.10.01 |
"forEach" 함수에서 "return" 키워드는 무엇을 의미합니까? (0) | 2022.10.01 |
Mac OS X에서 MySQL을 제거하려면 어떻게 해야 합니까? (0) | 2022.10.01 |
날짜에 일수 추가 (0) | 2022.10.01 |