PHP - 如何从数组中获取最后一个元素之前的元素?
Posted
技术标签:
【中文标题】PHP - 如何从数组中获取最后一个元素之前的元素?【英文标题】:PHP - How to get the element before the last element from an array? 【发布时间】:2011-01-12 18:09:47 【问题描述】:如何从 php5 的数组中获取最后一个元素之前的元素?
【问题讨论】:
【参考方案1】:这甚至可以在这个数组上工作:
$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";
end($array);
echo prev($array); // will print "how"
使用 count() 的其他解决方案假设您的数组的索引是按顺序排列的;通过使用 end 和 prev 移动数组指针,您可以获得实际值。尝试在上面的数组上使用 count() 方法,它会失败。
【讨论】:
这太棒了。我尝试使用标有复选标记的解决方案,但无法使其与我的数组一起使用(从 1 到 20 个可能的计数)。您的解决方案就像一个魅力。谢谢。【参考方案2】:$array[count($array)-2]
它应该是一个数字索引数组(从零开始)。您应该至少有 2 个元素才能正常工作。 (显然)
【讨论】:
Erik 的回答更正确,它不仅解释了他用非顺序键指示的情况,而且也适用于关联数组(以字符串为键的数组) 这个问题轻描淡写地暗示了主题是一个线性阵列。当数组包含单个元素并且设置了 error_reporting(E_ALL) 时,我的解决方案将失败并显示Notice: Undefined offset: -1 in /test.php on line 3
。 Erik 的解决方案无声无息地失败了。这很糟糕。【参考方案3】:
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,但适用于单项数组。
【讨论】:
很好的灵活解决方案,用于获取数组中的可变点。 implode('',array_slice($arr, -2, 1)) 一行搞定。【参考方案4】:一种适用于关联数组和数值数组的方法是使用array_pop()
将元素从数组末尾弹出。
$last = array_pop($array);
$second_last = array_pop($array);
// put back the last
array_push($array, $last);
【讨论】:
【参考方案5】:所有数组都有一个“内部数组指针”,它指向当前数组元素,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
),因此您无法使用返回的元素值检查元素是否存在,元素键不同。
密钥可以是integer 或string。该值可以是任何
type
。 source
key()
如果元素存在则返回当前键的值,否则返回 NULL。
有效的键永远不能为 NULL,因此如果返回 null,我们可以确定该元素不存在。
【讨论】:
【参考方案6】:// 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];
【讨论】:
以上是关于PHP - 如何从数组中获取最后一个元素之前的元素?的主要内容,如果未能解决你的问题,请参考以下文章