【发布时间】:2011-01-12 18:09:47
【问题描述】:
如何从 PHP5 的数组中获取最后一个元素之前的元素?
【问题讨论】:
如何从 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]
它应该是一个数字索引数组(从零开始)。您应该至少有 2 个元素才能正常工作。 (显然)
【讨论】:
Notice: Undefined offset: -1 in /test.php on line 3。 Erik 的解决方案无声无息地失败了。这很糟糕。
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,但适用于单项数组。
【讨论】:
一种适用于关联数组和数值数组的方法是使用array_pop() 将元素从数组末尾弹出。
$last = array_pop($array);
$second_last = array_pop($array);
// put back the last
array_push($array, $last);
【讨论】:
所有数组都有一个“内部数组指针”,它指向当前数组元素,PHP 有几个函数可以让您在数组中导航并查看当前元素的键和值。 p>
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];
【讨论】: