PHP 8.4.23 Released!

prev

(PHP 4, PHP 5, PHP 7, PHP 8)

prev将数组的内部指针倒回一位

说明

function prev(array |object &$array): mixed

将数组的内部指针倒回一位。

prev()next() 的行为类似,只除了它将内部指针倒回一位而不是前移一位。

参数

array

输入数组。

返回值

返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回 false

警告

此函数可能返回布尔值 false ,但也可能返回等同于 false 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。

更新日志

版本 说明
8.1.0 弃用在 object 上调用此函数。 要么首先使用 get_mangled_object_vars() object 转换为 array ,要么使用实现 Iterator 的类提供的方法,例如 ArrayIterator
7.4.0 SPL 类的实例现在被视为没有属性的空对象,而不是调用与此函数同名的 Iterator 方法。

示例

示例 #1 prev() 及相关函数用法示例

<?php
$transport = array('foot', 'bike', 'car', 'plane');
echo $mode = current($transport), PHP_EOL; // $mode = 'foot';
echo $mode = next($transport), PHP_EOL; // $mode = 'bike';
echo $mode = next($transport), PHP_EOL; // $mode = 'car';
echo $mode = prev($transport), PHP_EOL; // $mode = 'bike';
echo $mode = end($transport), PHP_EOL; // $mode = 'plane';
?>

注释

警告

此函数可能返回布尔值 false ,但也可能返回等同于 false 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。

注意: 很难区分是遇到 boolean false 单元还是遇到了数组的开头。 需要用 key() 检查 prev() 数组, 是否为 null 来作区分。

参见

  • current() - 返回数组中的当前值
  • end() - 将数组的内部指针指向最后一个单元
  • next() - 将数组中的内部指针向前移动一位
  • reset() - 将数组的内部指针指向第一个单元
  • each() - 返回数组中当前的键/值对并将数组指针向前移动一步

发现了问题?

了解如何改进此页面提交拉取请求报告一个错误
+添加备注

用户贡献的备注 3 notes

up
1
MicroVB INC
12 years ago
This function searches for the closest element in an array by key value, and returns the key/value pair, or false if not found.
<?php
function nearest($array, $value, $exact=false) {
 // Initialize Variables
 $next = false;
 $prev = false;
 $return = false;
 
 if(!isset($array[$value]) && !$exact) {
 // Insert element that doesn't exist so nearest can be found
 $array[$value] = '-';
 }
 
 if($exact && isset($array[$value])) {
 // If exact match found, and searching for exact (not nearest), return result.
 $return = Array($value=>$array[$value]);
 } else {
 // Sort array so injected record is near relative numerics
 ksort($array); // Sort array on key
 // Loop through array until match is found, then set $prev and $next to the respective keys if exist
 while ( !is_null($key = key($array)) ) {
 $val = current($array);
 if($key == $value) {
 prev($array); // Get entry before this one
 $prev = key($array);
 next($array); // Skip current entry as this was what we were looking for nearest to
 next($array); // Get entry after this one
 $next = key($array);
 break;
 }
 next($array);
 }
 if($prev && $next) {
 if(($long - $prev) > ($next - $long)) {
 // Previous is closer
 $return = Array($prev=>$array[$prev]);
 } else {
 // Next is closer
 $return = Array($next=>$array[$next]);
 }
 } elseif ($prev || $next) {
 if($prev) {
 // Only Previous exists
 $return = Array($prev=>$array[$prev]);
 } elseif ($next) {
 // Only Next exists
 $return = Array($next=>$array[$next]);
 }
 }
 }
 // Return resulting Array(). $return is false if nothing matches the closest conditions, or if exact is specified and key does not exist. 
 return $return;
}
?>

Example usage (to lookup the closest color in an array)
<?php
$mycolors= Array(
 5001046=>'Abbey',
 1774596=>'Acadia',
 8171681=>'Acapulco',
 6970651=>'Acorn',
 13238245=>'Aero Blue',
 7423635=>'Affair',
 8803850=>'Afghan Tan',
 13943976=>'Akaroa',
 16777215=>'Alabaster',
 16116179=>'Albescent White',
 10176259=>'Alert Tan',
 30371=>'Allports'
);
// Color to search for in Hex
$color = 'C0C0C0';
// Convert Hex to Long to compare with array() keys
$colorlong = base_convert($color,16,10);
// Check for an exact match
$result = nearest($mycolors, $colorlong, true);
if($result) {
 echo "An exact match was found for #" . $color . " which is called '" . $result[key($result)] . "'";
} else {
 echo "No exact match was found";
}
if(!$result) {
 // Check for closest match
 $result = nearest($mycolors, $colorlong, true);
 if($result) {
 // Match found
 echo "The closest match for #" . $color . " is #" . base_convert(key($result),10,16) . " which is called '" . $result[key($result)] . "'";
 } else {
 // No match found
 echo "No match was found for #" . $color;
 } 
}
?>
up
-1
soapergem at gmail dot com
17 years ago
Here's a slight revision to xmlich02's backwards iteration example. The problem with his/her example is that it will halt if any of the array elements are boolean false, while this version will not.
<?php
end($ar);
while ( !is_null($key = key($ar)) ) {
 $val = current($ar);
 echo "{$key} => {$val}\n";
 prev($ar);
}
?>
up
-1
Mikhail
6 years ago
Function to get element in array, that goes previous your key or false if it not exeists or key doesn't isset in array.
<?php
function previousElement(array $array, $currentKey)
{
 if (!isset($array[$currentKey])) {
 return false;
 }
 end($array);
 do {
 $key = array_search(current($array), $array);
 $previousElement = prev($array);
 }
 while ($key != $currentKey);
 return $previousElement;
}
+添加备注

AltStyle によって変換されたページ (->オリジナル) /