在PHP5中,如何获取数组中倒数第二个元素的前一个元素?
即使在这个数组上也可以运行:
$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";
end($array);
echo prev($array); // will print "how"
使用 count() 方法的其他解决方案假设你的数组索引按顺序排列;通过使用 end 和 prev 移动数组指针,您可以获取实际值。尝试在上面的数组上使用 count() 方法会失败。
$array[count($array)-2]
这应该是一个数字索引数组(从零开始)。为了使其起作用,您至少应该有两个元素。 (显然)
Notice: Undefined offset: -1 in /test.php on line 3
的错误。Erik的解决方案则会默默失败,这是不好的。 - Notinlistarray_slice函数接受一个负数偏移作为第二个参数。这将得到一个包含倒数第二个元素的单项数组:
$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);
如果您只想要单个值,您有几个选项。如果您不介意使用中间变量,则可以使用 [0] 获取第一个值,或调用 array_pop 或 array_shift,它们都需要通过引用传递变量,否则在严格模式下会出现警告。一种既适用于关联数组又适用于数字数组的方法是使用array_pop()
从数组末尾弹出元素。
$last = array_pop($array);
$second_last = array_pop($array);
// put back the last
array_push($array, $last);
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,则可以确定该元素不存在。// 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];