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

我怎样才能得到在PHP5数组最后一个元素之前的元素?

$array[count($array)-2] 

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

即使在这个数组上也可以工作:

 $array[0] = "hello"; $array[5] = "how"; $array[9] = "are"; end($array); echo prev($array); // will print "how" 

使用count()的其他解决scheme假定您的数组的索引顺序; 通过使用end和prev来移动数组指针,可以得到实际的值。 尝试使用上面的数组上的count()方法,它会失败。

array_slice采用负偏移量作为第二个参数。 这会给你一个包含第二个最后一项的项目数组:

 $arr = array(1,2,3,4,5,6); array_slice($arr, -2, 1); 

如果你只是想单独的价值,你有几个select。 如果你不介意使用一个中间variables,那么你可以用[0]获得第一个值,或者调用array_pop或array_shift,它们都需要一个通过引用传递的variables,否则你会在严格模式下得到警告。

或者你可以使用array_sum或array_product,这有点hacky,但对单个项目数组工作正常。

至于我很小的解决scheme

 end($array); echo prev($array); 

一个可以用于关联数组和数组的方法是使用array_pop()来从数组的末尾popup元素。

 $last = array_pop($array); $second_last = array_pop($array); // put back the last array_push($array, $last); 
 // 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有几个函数允许你浏览数组并查看当前元素的键和值。

  • 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 ),所以你不能使用返回的元素值检查元素是否存在,元素键是不同的。

密钥可以是整数或string 。 该值可以是任何type 。 资源

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