current

(PHP 4, PHP 5)

currentВозвращает текущий элемент массива

Описание

mixed current ( array &$array )

У каждого массива имеется внутренний указатель на его "текущий" элемент, который инициализирован первым элементом, добавленным в массив.

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

array

Массив.

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

Функция current() просто возвращает значение элемента массива, на который указывает его внутренний указатель. Она не перемещает указатель куда бы то ни было. Если внутренний указатель находится за пределами списка элементов или массив пуст, current() возвращает FALSE.

Внимание

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

Примеры

Пример #1 Пример использования current() и дружественных функций

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

$arr = array();
var_dump(current($arr)); // bool(false)

$arr = array(array());
var_dump(current($arr)); // array(0) { }
?>

Примечания

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

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

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

Коментарии

The docs do not specify this, but adding to the array using the brackets syntax:
     <?php $my_array[] = $new_value?>
will not advance the internal pointer of the array. therefore, you cannot use current() to get the last value added or key() to get the key of the most recently added element.

You should do an end($my_array) to advance the internal pointer to the end ( as stated in one of the notes on end() ), then

    <?php
     $last_key 
key($my_array);  // will return the key
     
$last_value current($my_array);  // will return the value
   
?>

If you have no need in the key, $last_value = end($my_array) will also do the job.

- Sergey.
2003-03-01 20:31:33
http://php5.kiev.ua/manual/ru/function.current.html
Note that by copying an array its internal pointer is lost:

<?php
$myarray 
= array(0=>'a'1=>'b'2=>'c');
next($myarray);
print_r(current($myarray));
echo 
'<br>';
$a $myarray;
print_r(current($a));
?>

Would output 'b' and then 'a' since the internal pointer wasn't copied. You can cope with that problem using references instead, like that:

<?php
$a 
=& $myarray;
?>
2003-12-02 04:10:00
http://php5.kiev.ua/manual/ru/function.current.html
For large array(my sample was 80000+ elements), if you want to traverse the array in sequence, using array index $a[$i] could be very inefficient(very slow). I had to switch to use current($a).
2004-04-24 02:04:00
http://php5.kiev.ua/manual/ru/function.current.html
To that "note": You won't be able to distinguish the end of an array from a boolean FALSE element, BUT you can distinguish the end from a NULL value of the key() function.

Example:
<?php
if (key($array) === null) {
    echo 
"You are in the end of the array.";
} else {
    echo 
"Current element: " current($array);
}
?>
2007-08-13 12:23:37
http://php5.kiev.ua/manual/ru/function.current.html
current() also works on objects:

<?php

 
echo current((object) array('one''two')); // Outputs: one

?>
2012-01-10 21:44:59
http://php5.kiev.ua/manual/ru/function.current.html
Note, that you can pass array by expression, not only by reference (as described in doc).

<?php
var_dump
current( array(1,2,3) ) ); // (int) 1
?>
2013-10-30 09:11:28
http://php5.kiev.ua/manual/ru/function.current.html
If you do current() after using uset() on foreach statement, you can get FALSE in PHP version 5.2.4 and above.
There is example:
<?php
$prices 
= array(
   
=> '1300990',
   
=> '500',
   
=> '600'
);
foreach(
$prices as $key => $price){
    if(
$price 1000){
        unset(
$prices[$key]);
    }
}

var_dump(current($prices)); // bool(false)
?>
If you do unset() without foreach? all will be fine.
<?php
$prices 
= array(
   
=> '1300990',
   
=> '500',
   
=> '600'
);
unset(
$prices[1]);
unset(
$prices[2]);

var_dump(current($prices));
?>
2014-11-12 10:51:11
http://php5.kiev.ua/manual/ru/function.current.html
Based on this example function.current#116128 i would like to add the following.  As Vasily points out in his example 
<?php
$prices 
= array(
   
=> '1300990',
   
=> '500',
   
=> '600'
);
foreach(
$prices as $key => $price){
    if(
$price 1000){
        unset(
$prices[$key]);
    }
}

var_dump(current($prices)); // bool(false)
?>
The above example will not work and return false for version of PHP between 5.2.4 and 5.6.29. The issue is not present on PHP versions >= 7.0.1
A different workaround (at least from Vasily's example) would be to use reset() before using current() in order to reset the array pointer to start.
<?php
$prices 
= array(
   
=> '1300990',
   
=> '500',
   
=> '600'
);
foreach(
$prices as $key => $price){
    if(
$price 1000){
        unset(
$prices[$key]);
    }
}
reset($prices);
var_dump(current($prices)); // string(7) "1300990"
?>
2017-08-06 09:22:21
http://php5.kiev.ua/manual/ru/function.current.html
Array functions, such as `current()` and `rewind()` will work on `Traversable` as well, PHP 5.0 - 7.3, but not in HHVM:

<?php

$queue 
= new ArrayIterator(array('adasdasd'));
reset($queue);
$current current($queue);
var_dump($current);

?>

See https://3v4l.org/VjCHR
2018-07-10 16:28:26
http://php5.kiev.ua/manual/ru/function.current.html
Array can be passed by both REFERENCE and EXPRESSION on `current`, because current doesn't move array's internal pointer,
this is not true for other functions like: `end`, `next`, `prev` etc.

<?php
   
function foo() {return array(1,2,3);}
    echo 
current(foo());  // this print '1'
   
echo end(foo());      // this print error: Only variables should be passed by reference
?>
2019-09-24 11:02:51
http://php5.kiev.ua/manual/ru/function.current.html
It looks like `current()` is deprectated for calling on objects since PHP 7.4. 

Consider this code

```
$a = new ArrayIterator([1,2,3]);

var_dump(current($a), $a->current());
```

It returns 
```
int(1)
int(1)
```

In PHP 7.3, but in PHP7.4 you get:
```
bool(false)
int(1)
```

And in PHP8:
```
Deprecated: current(): Calling current() on an object is deprecated in /in/fdrNR on line 5
bool(false)
int(1)
```
2021-10-19 13:45:19
http://php5.kiev.ua/manual/ru/function.current.html

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