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 - 如何从数组中获取最后一个元素之前的元素?的主要内容,如果未能解决你的问题,请参考以下文章

获取php数组的最后5个元素

php获取并删除数组的第一个和最后一个元素

php获取并删除数组的第一个和最后一个元素

php 如何取出数组中第一个和最后一个元素的值

php获取数组中的第一个(最后一个)元素

获取数组中的第一个和最后一个元素