PHP - 如何在数组的最后一个元素之前获取元素?

Man*_*era 49 php arrays element

如何从PHP5中的数组中的最后一个元素之前获取元素?

Eri*_*rik 124

这甚至可以在这个数组上工作:

$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";

end($array);
echo prev($array); // will print "how"
Run Code Online (Sandbox Code Playgroud)

使用count()的其他解决方案假设您的数组的索引按顺序排列; 通过使用end和prev来移动数组指针,您将获得实际值.尝试在上面的数组上使用count()方法,它将失败.

  • 这太棒了.我尝试使用带有复选标记的解决方案,但无法使其与我的阵列一起工作(1到20个可能的计数).您的解决方案就像一个魅力.谢谢. (4认同)

Not*_*ist 73

$array[count($array)-2]
Run Code Online (Sandbox Code Playgroud)

它应该是一个数字索引数组(从零开始).你应该至少有2个元素才能工作.(明显)

  • Erik的答案更正确,它不仅考虑了他用非顺序键表示的情况,而且还可以使用关联数组(带字符串作为键的数组) (3认同)

Dev*_*mal 19

至于我非常小的解决方案

end($array);
echo prev($array);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,相比之下,接受的答案是可怕的. (3认同)

Jam*_*are 16

array_slice将负偏移量作为第二个参数.这将为您提供包含第二个最后一项的单个项目数组:

$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);
Run Code Online (Sandbox Code Playgroud)

如果你只想要它自己的单一值,你有几个选择.如果您不介意使用中间变量,那么您可以使用[0]获取第一个值或调用array_pop或array_shift,它们都需要通过引用传递的变量,否则您将在严格模式下收到警告.

或者您可以使用array_sum或array_product,这有点hacky但适用于单项数组.


Yad*_*ada 6

一个适用于关联数组和数值数组的方法是用于从数组array_pop()末尾弹出元素.

$last = array_pop($array);
$second_last = array_pop($array);

// put back the last
array_push($array, $last);
Run Code Online (Sandbox Code Playgroud)


Tar*_*nes 6

所有数组都有一个指向当前数组元素的“内部数组指针”,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 
    */
}
Run Code Online (Sandbox Code Playgroud)

如您所见,预期结果 ( false) 和不存在元素的结果相同 ( FALSE),因此您无法使用返回的元素值检查元素是否存在,元素键不同。

键可以是整数字符串。该值可以是任何type. 来源

key()如果元素存在,否则将返回NULL返回当前键的值。有效的键永远不能为 NULL,因此如果返回 null,我们可以确定该元素不存在。