← PHP中的array_slice():从数组里切出一段 PHP中的array_diff_assoc():带键名比较的数组差集 →

PHP中的current():获取数组当前指针指向的元素

原创 2026-05-22 PHP 已有人查阅

PHP数组内部有一个指针,指向当前正在处理的元素。current()函数就是用来获取这个指针当前位置的值。

数组就像一个带游标的列表,游标停在哪,current()就取出哪儿的元素。这个函数从PHP 4.0就有了。

语法格式

mixed current(array $array): mixed

参数说明:

参数 说明 必填?
array 要操作的数组 必填

返回值: 返回当前指针位置的值。如果指针指向了数组末尾(没有更多元素),返回false。

注意

current()返回false有两种可能:

  1. 当前元素的值本身就是false

  2. 指针已经移到了数组末尾

没法通过返回值区分这两种情况。所以检查空数组要结合其他方法。

相关的指针操作函数

函数 作用
current() 获取当前元素的值
key() 获取当前元素的键名
next() 指针向前移动一位
prev() 指针向后移动一位
reset() 指针重置到第一个元素
end() 指针移到之后一个元素
each() 返回当前键值对并移动指针(PHP 7.2+已废弃)

示例1:获取当前元素(默认指向第一个)

<?php
$langs = ["PHP", "JavaScript", "Python", "Java", "Go"];
$current_val = current($langs);
echo "当前元素:{$current_val}\n";
?>

输出:

当前元素:PHP

新创建的数组,指针默认指向第一个元素(下标0)。

示例2:配合next()移动指针

<?php
$courses = ["PHP基础", "MySQL教程", "JavaScript入门", "Laravel框架", "Vue实战"];
print_r(current($courses));  // 第一个:PHP基础

next($courses);
print_r(current($courses));  // 第二个:MySQL教程

next($courses);
print_r(current($courses));  // 第三个:JavaScript入门
?>

输出:

PHP基础
MySQL教程
JavaScript入门

每调用一次next(),指针往前移一位。current()就能拿到新位置的值。

示例3:指针移到之后再往前

<?php
$scores = [85, 92, 78, 88, 96];
// 先移到之后一个
end($scores);
echo "之后一个:" . current($scores) . "\n";

// 往前移一位
prev($scores);
echo "倒数第二个:" . current($scores) . "\n";

// 重置到开头
reset($scores);
echo "第一个:" . current($scores) . "\n";
?>

输出:

之后一个:96
倒数第二个:88
第一个:85

end()移到末尾,prev()往后退。reset()一键回到起点。

示例4:遍历数组的另一种方式

<?php
$student_scores = [
    "代码号001" => 87,
    "代码号002" => 92,
    "代码号003" => 78,
    "代码号004" => 95
];

// 用while + current + next遍历
reset($student_scores);  // 确保从头开始
while ($score = current($student_scores)) {
    $key = key($student_scores);
    echo "{$key} 的成绩是:{$score}\n";
    next($student_scores);
}
?>

输出:

代码号001 的成绩是:87
代码号002 的成绩是:92
代码号003 的成绩是:78
代码号004 的成绩是:95

这种遍历方式和foreach比各有利弊。foreach更方便,但这种方式可以控制遍历的步进逻辑(比如跳过一个、走两步退一步之类的)。

个人经验分享

  1. foreach更适合大多数场景
    日常开发里,99%的情况用foreach就够了。current()/next()这套是PHP早期的数组遍历方式,现在用得少了。但它们在某些特殊场景下还有用武之地:

    • 需要手动控制指针移动步数

    • 多个数组之间的同步遍历

    • 需要处理嵌套的复杂遍历逻辑

  2. 区分current()和key()

    • current()拿的是值

    • key()拿的是键名
      经常搭配使用。

  3. 注意false的

    $arr = [false, true, false];
    reset($arr);
    
    while ($val = current($arr)) {
        // 这个循环不会执行,因为第一个值就是false
        echo $val;
        next($arr);
    }

    如果数组包含false、0、空字符串这些“假值”,用current()做循环条件会提前终止。解决方案:

    while ($val = current($arr) !== false) {
        // 明确检查 !== false
    }
    // 或者用 foreach 省心
  4. 遍历结束后current()返回false

    $arr = [1,2,3];
    reset($arr);
    next($arr);
    next($arr);
    next($arr);  // 已经到末尾了
    var_dump(current($arr));  // bool(false)

示例5:手动同步遍历两个数组

<?php
$names = ["张伟", "李芳", "王磊", "赵敏"];
$scores = [87, 92, 78, 88];

reset($names);
reset($scores);

while (($name = current($names)) !== false && ($score = current($scores)) !== false) {
    echo "{$name}:{$score}分\n";
    next($names);
    next($scores);
}
?>

输出:

张伟:87分
李芳:92分
王磊:78分
赵敏:88分

两个不同数组需要同时遍历时,用这套手动指针的方式挺方便的。foreach没法同时遍历两个数组,除非用array_map()

示例6:指针的独立性

<?php
$data = ["a", "b", "c", "d"];
// 每个数组都有自己独立的内部指针
$ref1 = $data;
$ref2 = $data;

echo "ref1:";
echo current($ref1) . " ";
next($ref1);
echo current($ref1) . " ";

echo "\nref2:";
echo current($ref2) . " ";  // 还是第一个
?>

输出:

ref1:a b
ref2:a

注意:复制一个数组时,新数组的指针是独立的,互不影响。

本节课程知识要点

  • current()返回数组内部指针当前位置的值

  • 新数组的指针默认指向第一个元素

  • 配合next()prev()reset()end()移动指针

  • 返回值false可能是数组末尾,也可能是元素值本身就是false

  • 目前foreach比这套手动指针更常用,但特定场景下仍有价值

  • current()的别名是pos(),功能一样

  • 从PHP 4.0开始可用

← PHP中的array_slice():从数组里切出一段 PHP中的array_diff_assoc():带键名比较的数组差集 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号