next

(PHP 4, PHP 5)

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

Описание

mixed next ( array &$array )

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

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

array

Массив array модифицируется данной функцией.

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

Возвращает значение элемента массива, находящегося на позиции, следующей за позицией внутренний указателя или FALSE, если достигнут конец массива.

Внимание

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

Примеры

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

<?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. Для корректного обхода массива, который может содержать FALSE элементы, смотрите функцию each().

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

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

Коментарии

Take care when replacing code using reset()/next() with code using foreach as foreach does not update the array's internal pointer.  This means you cannot, say, use next() to skip an element in foreach loop, or use current() within a function to get a reference to the current element.  You probably have code depending on this internal pointer and replacing it will be more work than you anticipated.

See http://www.php.net/foreach
2004-04-17 00:49:15
http://php5.kiev.ua/manual/ru/function.next.html
Автор:
This code returns neighbors of the specified key.  The result will be empty if it doesn't have any neighbors.  My approach was to use the order of keys to determine neighbors, which is differnet from just getting the next/previous element in an array.  Feel free to point out stupidities :)

<?php

function array_neighbor($arr$key)
{
   
krsort($arr);
   
$keys array_keys($arr);
   
$keyIndexes array_flip($keys);
   
   
$return = array();
    if (isset(
$keys[$keyIndexes[$key]-1]))
       
$return[] = $keys[$keyIndexes[$key]-1];
    if (isset(
$keys[$keyIndexes[$key]+1]))
       
$return[] = $keys[$keyIndexes[$key]+1];

    return 
$return;
}

?>
2004-05-20 19:36:05
http://php5.kiev.ua/manual/ru/function.next.html
This function will return the previous,next neighbors of an array entry within an associative array. If the specified $key points to the last or first element of the array, the first or last keys of the array will be returned consecutively. This is an improved version of the same function posted earlier.

<?php
function array_neighbor($arr$key)
{
   
$keys array_keys($arr);
   
$keyIndexes array_flip($keys);
 
   
$return = array();
   if (isset(
$keys[$keyIndexes[$key]-1])) {
       
$return[] = $keys[$keyIndexes[$key]-1];
   }
   else {
       
$return[] = $keys[sizeof($keys)-1];
   }
   
   if (isset(
$keys[$keyIndexes[$key]+1])) {
       
$return[] = $keys[$keyIndexes[$key]+1];
   }
   else {
       
$return[] = $keys[0];
   }
   
   return 
$return;
}
?>
2004-08-18 13:06:17
http://php5.kiev.ua/manual/ru/function.next.html
I need to know if an array has more items, but without moving array's internail pointer. Thats is, a has_next() function:

<?php
function has_next($array) {
    if (
is_array($array)) {
        if (
next($array) === false) {
            return 
false;
        } else {
            return 
true;
        }
    } else {
        return 
false;
    }
}

$array = array('fruit''melon');
if (
has_next($array)) {
    echo 
next($array);
}

// prints 'melon'
?>

Since you do not pass the array by reference, its pointer is only moved inside the function.
Hope that helps.
2004-10-13 04:47:21
http://php5.kiev.ua/manual/ru/function.next.html
Автор:
Papipo's function below is usefull in concept but does not work. 

"Since you do not pass the array by reference, its pointer is only moved inside the function."

This is true, but the array you are manipulating in your has_next() function will have it's pointer set to the first element, not the same position as the original array. What you want to do is pass the array to the has_next() function via reference. While in the has_next() function, make a copy of the array to work on. Find out the current pointer position of the original array and set the pointer on the working copy of the array to the same element. Then you may test to see if the array has a "next" element.

Try the followig insetad:

<?php
function has_next(&$array
{
   
$A_work=$array//$A_work is a copy of $array but with its internal pointer set to the first element.
   
$PTR=current($array); 
   
array_set_pointer($A_work$PTR);

    if(
is_array($A_work)) 
    {
        if(
next($A_work)===false
            return 
false;
        else
            return 
true;
    } 
    else 
        return 
false;
}

function 
array_set_pointer(&$array$value)
{
   
reset($array);
    while(
$val=current($array))
    {
        if(
$val==$value
            break;

       
next($array);
    }
}
?>
2005-04-28 13:10:20
http://php5.kiev.ua/manual/ru/function.next.html
this may be handy and i didnt know where else to post it.. i need a simple function to cycle through an array i eventually made it into a class so i could have multiple cycles.. if you like it or find it usefull please email me and let me know

class Cycle
{
    var $position;
    var $dataArray;
    var $dataArrayCount;
   
    function Cycle()
    {
        $this->dataArray = func_get_args();
        $this->dataArrayCount = count($this->dataArray);
    }
   
    function Display()
    {
        $this->position = (!isset($this->position) || $this->position >= ($this->dataArrayCount - 1)) ? 0 : $this->position += 1;
        return $this->dataArray[$this->position];
    }
   
}

$bgColor = new Cycle('#000000', '#FFFFFF', '#FF0000');

echo $bgcolor->Display();
//returns #000000
echo $bgcolor->Display();
//returns #FFFFFF
echo $bgcolor->Display();
//returns #FF0000
echo $bgcolor->Display();
//returns #000000
2006-05-13 11:48:22
http://php5.kiev.ua/manual/ru/function.next.html
Don't confuse next with continue!

If you're a Perl developer starting with PHP, you might try to use "next" inside a loop to skip to the next iteration...   

i.e., 

foreach ($things as $thing) {
  if (something I don't like about $thing) {
   next;
  }
  blah....
}

The php compiler will take next... but it's not going to work.

Do this instead:
foreach ($things as $thing) {
  if (something I don't like about $thing) {
   continue;
  }
  blah....
}
2007-02-06 15:32:13
http://php5.kiev.ua/manual/ru/function.next.html
This class implements simple operations with array

<?php
class Steps {
   
    private 
$all;
    private 
$count;
    private 
$curr;
   
    public function 
__construct () {
     
     
$this->count 0;
     
    }
   
    public function 
add ($step) {
     
     
$this->count++;
     
$this->all[$this->count] = $step;
     
    }
   
    public function 
setCurrent ($step) {
     
     
reset($this->all);
      for (
$i=1$i<=$this->count$i++) {
        if (
$this->all[$i]==$step) break;
       
next($this->all);
      }
     
$this->curr current($this->all);
     
    }
   
    public function 
getCurrent () {
     
      return 
$this->curr;
     
    }
   
    public function 
getNext () {
     
     
self::setCurrent($this->curr);
      return 
next($this->all);
     
    }
       
  }
?>

usage example:

<?php
   $steps 
= new Steps();
   
$steps->add('one');
   
$steps->add('two');
   
$steps->add('three');
   
$steps->setCurrent('one');
   echo 
$steps->getCurrent()."<br />";
   echo 
$steps->getNext()."<br />";
   
$steps->setCurrent('two');
   echo 
$steps->getCurrent()."<br />";
   echo 
$steps->getNext()."<br />";
?>
2007-12-11 05:36:03
http://php5.kiev.ua/manual/ru/function.next.html
regarding references with foreach, you can use them directly. Obviating various posts which provide many lines of 'work arounds'.

$array = array(1,2,3,4,5);

foreach($array as &$value)

or use $key

foreach($array as $key => $value)
{
    $array[$key] = '...';
}
2008-09-02 18:27:00
http://php5.kiev.ua/manual/ru/function.next.html
PHP: 5.2.10-2ubuntu6.3 (default apt-get installation on actual, see Date, jaunty 9.10 Ubuntu Distro - G33kWoRDs)

Have a look at your array pointer if you copy an array - the pointer will be copied, too.

For example if you got this construct:
<?php
    $array 
= array('zero','one','two','three','four','five','six','seven');
   
$array2 $array;
   
next($array);
    echo 
key($array);
    echo 
key($array2);

   
// will output:
    // 1
    // 0
?>

But if you copy the array after you've setted the pointer, the pointer will be copied, too:
<?php
    $array 
= array('zero','one','two','three','four','five','six','seven');
   
next($array);
   
$array2 $array;
    echo 
key($array);
    echo 
key($array2);
   
   
// will output:
    // 1 
    // 1
?>

What's more is, that foreach not resetting the pointer after walk through:
<?php

    $array 
= array('zero','one','two','three','four','five','six','seven');
   
next($array);
   
$array2 = array();
    foreach(
$array AS $key => $value){
        echo 
$key;
       
$array2[$key] = $value;
    }
    echo 
var_dump(key($array));
    echo 
key($array2);

   
// will output for foreach:
    // 0 1 2 3 4 5 6 7
    // and for the keys
    // NULL
    // 0
?>

The php-functions seems to reset the pointer on the given position after walk through (i don't know the internal handling - there could be used a copy of the array, too):
<?php

    $array 
= array('zero','one','two','three','four','five','six','seven');
   
next($array);
   
$array2 array_values($array);
    echo 
key($array);
    echo 
key($array2);

   
// will output:
    // 1
    // 0
?>

There are a lot Methods like array_merge($array) that will neither reset the pointer of $array nor copy the pointer to $array2. Have a look on this.
I Hope this was a little helpfull.
2009-12-08 15:19:43
http://php5.kiev.ua/manual/ru/function.next.html
Автор:
After dealing with the fact that next() will either returns FALSE when there is no further element in the array or if the element itself is FALSE, I finally find a way to do a has_next() method, which will never fails. You can ignore and/or downvote my last comment, this it will be deleted.
Here is the code that work :
<?php
   
function has_next(array $a){
        return 
next($a) !== false ?: each($a) !== false;
    }
?>
2015-07-30 15:45:51
http://php5.kiev.ua/manual/ru/function.next.html
Автор:
Now from PHP 7.2, the function "each" is deprecated, so the has_next I've posted is no longer a good idea. There is another to keep it simple and fast:

<?php
function has_next(array $_array)
{
  return 
next($_array) !== false ?: key($_array) !== null;
}
?>
2017-08-24 14:57:02
http://php5.kiev.ua/manual/ru/function.next.html

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