prev

(PHP 4, PHP 5)

prevПередвигает внутренний указатель массива на одну позицию назад

Описание

mixed prev ( array &$array )

Передвигает внутренний указатель массива на одну позицию назад.

prev() ведёт себя подобно next(), за исключением того, что она передвигает внутренний указатель массива на одну позицию назад, а не вперёд.

Список параметров

array

Входной массив.

Возвращаемые значения

Возвращает значение массива, на которое ранее указывал внутренний указатель массива, или FALSE если больше элементов нет.

Примеры

Пример #1 Пример использования prev() и друзей

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

Примечания

Внимание

Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

Замечание: Вы не сможете различить начало массива от boolean элемента FALSE. Для корректного обхода массива, который может содержать элементы FALSE, смотрите функцию each().

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

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

Коментарии

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);
}

?>
2009-05-29 15:06:28
http://php5.kiev.ua/manual/ru/function.prev.html
Автор:
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$colorlongtrue);
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$colorlongtrue);
    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;
    } 
}
?>
2014-03-31 04:17:54
http://php5.kiev.ua/manual/ru/function.prev.html
Автор:
Some corrections to the previous function.
- When prev() and next() distance is now calculated properly returning the 'closer' one.
- When exact is false, and an item exists with the key searched for, it now returns that entry instead of next/prev closest
- At ends of the array, sometimes when moving past using next() or prev(), it caused results to die. This was corrected.
- Added field to result stating whether the match was 'exact' ('exact'=>true), or nearest ('exact'=>false)

<?php
function nearest($array$value$exact=false) {
   
// Initialize Variables
   
$next false;
   
$prev false;
   
$return false;

   
$arr_begin false;
   
$arr_end false;
       
   
$exact_match false;
       
   
    if(
$exact && isset($array[$value])) {
       
// If exact match found, and searching for exact (not nearest), return result.
       
$return = Array($value=>$array[$value]);
       
$exact_match true;
    } elseif (!
$exact && isset($array[$value])) {
       
// If exact match found, and searching for nearest, return result.
       
$return = Array($value=>$array[$value]);
       
$exact_match true;
    } else {

        if(!isset(
$array[$value]) && !$exact) {
           
// Insert element that doesn't exist so nearest can be found
           
$array[$value] = '-';
        }
   
       
// Sort array so injected record is near relative numerics
       
ksort($array); // Sort array on key

        // Set start and end keys
       
$arr_begin key($array);
       
end($array);
       
$arr_end key($array);
       
reset($array);
       
       
// 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) {
                if(
$value <> $arr_begin) {
                   
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
               
               
if($value <> $arr_end) {
                   
next($array); // Get entry after this one
                   
$next key($array);
                }
                break;
            }
           
next($array);
        }

        if(
$prev && $next) {
            if((
$value $prev) < ($next $value)) {
               
// 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.       
   
if($return) {
        return 
$return+Array('exact'=>$exact_match);
    } else {
        return 
false;
    }
}
?>

Just to clarify, this function will return either an Array() containing the $key=>$value pair of the result and 'exact'=>(bool) whether the match was exact or not.

To access the $key=>$value pair, can be done as follows :
<?php

    $result 
nearest( ... );  // Just here for clarification of the position for the code that follows.
     
   
if($result) {
       
// Output the Key
       
echo key($result);

       
// Output the Value
       
echo $resultkey($result) );

       
// Output if exact match
       
if($result['exact']) {
            echo 
'This was an EXACT match';
        } else {
            echo 
'This result was found with fuzzy logic';
        }

    } else {

        echo 
'No result found';

    }

?>
2014-03-31 08:09:23
http://php5.kiev.ua/manual/ru/function.prev.html

    Поддержать сайт на родительском проекте КГБ