PHP - 如何在数组的最后一个元素之前获取元素?

时间:2010-02-03 18:28:17

标签: php arrays element

如何在PHP5中的数组的最后一个元素之前获取元素?

7 个答案:

答案 0 :(得分:116)

这甚至可以在这个数组上运行:

$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";

end($array);
echo prev($array); // will print "how"

使用count()的其他解决方案假设您的数组的索引按顺序排列;通过使用end和prev来移动数组指针,您将获得实际值。尝试在上面的数组上使用count()方法,它将失败。

答案 1 :(得分:67)

$array[count($array)-2]

它应该是一个数字索引数组(从零开始)。你应该至少有2个元素才能工作。 (显然)

答案 2 :(得分:16)

array_slice将负偏移量作为第二个参数。这将为您提供包含第二个最后一项的单个项目数组:

$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);

如果你只想要它自己的单一值,你有几个选择。如果您不介意使用中间变量,则可以使用[0]获取第一个值或调用array_pop或array_shift,它们都需要通过引用传递的变量,否则您将在严格模式下收到警告。

或者您可以使用array_sum或array_product,这有点hacky但适用于单项数组。

答案 3 :(得分:14)

至于我非常小的解决方案

end($array);
echo prev($array);

答案 4 :(得分:6)

一种适用于关联数组和数值数组的方法是使用array_pop()在数组末尾弹出元素。

$last = array_pop($array);
$second_last = array_pop($array);

// put back the last
array_push($array, $last);

答案 5 :(得分:4)

所有数组都有一个"内部数组指针" 指向当前数组元素,PHP有几个函数可以让你浏览数组并查看当前元素键和价值。

  • end() - 将数组的内部指针设置为最后一个元素
  • reset() - 将数组的内部指针设置为其第一个元素
  • prev() - 倒回内部数组指针
  • next() - 推进数组的内部数组指针
  • current() - 返回数组中的当前元素
  • key() - 从数组中获取密钥
  • each() - 从数组中返回当前键和值对并使数组光标前进

无论数组是空的,顺序的还是关联的,这些函数都可以工作,并且由于在示例中没有指定数组,我认为这必须适用于任何数组。

$array = array(
    'before_last' => false,
    'last' => false,
);

end($array); /* 
- set pointer to last element -> $array['last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

prev($array); /* 
- set pointer one place before current pointer -> $array['before_last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

if(!is_null(key($array)){ /* 
- return current element key if it exists -> "before_last"
- else return NULL
*/
    $before_last_element_value = current($array); /* 
    - return current element value if it exists, -> false
    - else return FALSE 
    */
}

正如您所见,预期结果(false)和不存在元素的结果相同(FALSE),因此您无法使用返回的元素值(元素)检查元素是否存在关键是不同的。

  

密钥可以是integerstring。该值可以是任何typesource

如果元素存在,key()将返回当前键的值,否则返回NULL。 有效密钥永远不能为NULL,因此如果返回null,我们可以确定该元素不存在。

答案 6 :(得分:2)

// Indexed based array
$test = array('a','b','c','d','e');
$count = count($test);
print $test[$count-2];

// Associative Array
$months = array(
         'jan'=>'January', 
         'feb' => 'february', 
         'mar' => 'March', 
         'apr' => 'April'
    );

$keys = array_keys($months);
$count = count($keys);
print $keys[$count-2];