PHP 8.6.0 Beta 1 is available for testing

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 устарел. Объект (object ) либо сначала преобразовывают в массив (array ) функцией get_mangled_object_vars() , либо пользуются методами класса наподобие ArrayIterator , в котором реализовали интерфейс Iterator .
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';
?>

Примечания

Замечание: Начало массива неотличимо от элемента с логическим (bool ) значением false . Чтобы отличить, нужно проверить, что возвращаемый функцией key() ключ предыдущего элемента, как его определяет функция prev(), не равен значению null .

Смотрите также

  • current() - Возвращает текущий элемент массива
  • end() - Устанавливает внутренний указатель массива на последний элемент
  • next() - Сдвигает внутренний указатель массива на одну позицию вперёд
  • reset() - Устанавливает внутренний указатель массива на первый элемент
  • each() - Возвращает текущую пару ключа и значения массива и сдвигает указатель на одну позицию вперёд

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 3 notes

up
2
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
0
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;
}
up
-2
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);
}
?>
+Добавить

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