如何在PHP5中的数组的最后一个元素之前获取元素?
答案 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
),因此您无法使用返回的元素值(元素)检查元素是否存在关键是不同的。
如果元素存在,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];