【问题标题】:Get the last element of an array, without changing its internal pointer获取数组的最后一个元素,而不改变其内部指针
【发布时间】:2012-12-15 09:43:52
【问题描述】:

如何在不更改内部指针的情况下获取数组的最后一个元素?

我正在做的是:

while(list($key, $value) = each($array)) {  
    //do stuff  
    if($condition) {  
        //Here I want to check if this is the last element of the array            
        prev($array);  
    }  
}

所以end($array) 会搞砸的。

【问题讨论】:

  • 提示:array_keys。此外,单击橙色大问号以获取格式化帮助和说明。
  • @PankitKapadia end() 更改数组内部指针,问题中提到它没有任何帮助。
  • 使用$count = count($array);并检查使用它。
  • @xyu - 检查答案。是你想要的吗? :-/
  • 该数组是否可能包含关联键(不仅包含整数,还包含字符串的键)?

标签: php arrays


【解决方案1】:

很简单,你可以使用:

$lastElementKey = end(array_keys($array));
while(list($key, $value) = each($array)) {  
    //do stuff  
    if($key == $lastElementKey) {  
        //Here I want to check if this is the last element of the array            
        prev($array);  
    }  
}

【讨论】:

  • 我最终在this question的答案中使用了解决方案
  • 不确定该答案如何应用,但可以
  • 如果您的数组多次包含相同的值,则其他问题中提供的答案对您不起作用。正确的方法是检查键而不是值。
  • 我的解决方案使用 no if's 所以我想它更快。
  • 它完成了这项工作(数组具有不同的值)。
【解决方案2】:

试试这个:

<?php
$array=array(1,2,3,4,5);
$totalelements = count($array);
$count=1;

while(list($key, $value) = each($array)) {  
    //do stuff  
    if($count == $totalelements){ //check here if it is last element
        echo $value;
    }
    $count++;
}
?>

【讨论】:

  • 可以像for($count=1;list($key, $value) = each($array));$count++)那样做
【解决方案3】:

为什么不直接使用类似的东西:

$lastElement= end($array);
reset($array);
while(list($key, $value) = each($array)) {  
    //do stuff   
}

// Do the extra stuff for the last element

【讨论】:

  • 如果第一个和最后一个元素相同,则不是一个好的解决方案。正确的解决方案是使用数组键。
  • 我想检查$value是否是最后一个元素。
  • @xyu ?为什么它不起作用?据我了解,您想检查它以用它做其他事情,对吗?你想对所有元素做同样的事情,除了最后一个你想做一些额外的东西
  • 确实如此。我从来没有说过不会。
  • 哦...好的。我以为你这样写是因为它不能解决你所说的问题。
【解决方案4】:

类似这样的:

$array = array_reverse($array, true);
$l = each($array);
$lastKey = $l['key'];
$array = array_reverse($array, true);

while(list($key, $value) = each($array)) {  
    //do stuff  
    if($key == $lastKey) {  
        echo $key . ' ' . $value . PHP_EOL;
    }  
}

这里的问题是,如果数组很大,那么反转它需要一些时间。

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 2013-09-21
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2014-12-16
    相关资源
    最近更新 更多