연관 배열의 마지막 쌍 찾기
-
22-07-2019 - |
문제
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
) 또는 그렇지 않으면 값을 메모하십시오.