在关联数组中查找最后一对

时间:2009-10-30 18:36:30

标签: php arrays associative-array

我正在使用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
}

5 个答案:

答案 0 :(得分:7)

这样简单,没有柜台和其他'黑客'。

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

   // your stuff

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

请注意,您必须使用===,因为函数next()可能会返回非布尔值评估为false ,例如{ {1}}或“”(空字符串)。

答案 1 :(得分:5)

我们不需要使用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
    }
}

答案 2 :(得分:3)

有很多方法可以做到这一点,因为其他答案无疑会显示出来。但我建议您学习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迭代器都会为你打开一个全新的世界:) Here is a nice tutorial.

答案 3 :(得分:3)

假设你在迭代它时没有改变数组,你可以维护一个在循环中减少的计数器,一旦它达到0,你就处理最后一个:

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

答案 4 :(得分:1)

您可以使用数组指针遍历函数(特别是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)或者记住价值。