我正在循环一个带有 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
}
我正在循环一个带有 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
}
就这么简单,没有计数器和其他“黑客”。
foreach ($array as $key => $value) { // 你的东西 if (next($array) === false) { // 这是最后一次迭代 } }
请注意,您必须使用===
,因为该函数next()
可能会返回一个非布尔值,其计算结果为false
,例如0
或“”(空字符串)。
我们不需要使用 foreach 遍历数组,我们可以使用 end()、key() 和 current() php 函数来获取最后一个元素并获取它的 key + value。
<?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及其CachingIterator。这是一个例子:
<?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 迭代器,它们就会为你打开一个全新的世界:)这是一个很好的教程。
假设您在遍历数组时没有更改数组,您可以维护一个在循环中递减的计数器,一旦达到 0,您将处理最后一个:
<?php
$counter = count($kvarr);
foreach ($kvarr as $key => $value)
{
--$counter;
if (!$counter)
{
// deal with the last element
}
}
?>
您可以使用数组指针遍历函数(特别是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
)或记忆该值。