首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列指針操作函數 current()、next()、reset() 實戰詳解

     編輯:PHP 相關知識

函數速查

函數作用返回值指針移動
current()取得當前元素值值 / false (指針越界)否
next()指針後移一位下一個元素值 / false是
prev()指針前移一位上一個元素值 / false是
reset()指針重置到首元素首元素值 / false是 (歸零)
end()指針移至尾元素尾元素值 / false是
key()取得當前鍵名鍵名 / null否
each()取得鍵值對並後移 (PHP 7.2 棄用)陣列 / false是

核心機制

PHP 陣列內部維護一個指針,指向「當前元素」。foreach 會自動重置指針並迭代,但手動操作指針函數不會自動重置,需開發者自行控制。

實戰範例

1. 基礎導航

<?php
$steps = ['step one', 'step two', 'step three', 'step four'];

echo current($steps); // step one
next($steps); next($steps);
echo current($steps); // step three
reset($steps);
echo current($steps); // step one

2. while + current/next 手動迭代 (不推薦生產用)

<?php
$colors = ['red', 'blue', 'green'];
while (($val = current($colors)) !== false) {
    echo $val . PHP_EOL;
    next($colors);
}
// 輸出: red, blue, green

陷阱:陣列含 0、''、false 等假值時,current() 返回假值導致循環提前結束。正確寫法:

while (($val = current($colors)) !== false) { ... } // 嚴格比較
// 或更佳
foreach ($colors as $val) { ... }

3. 關聯陣列鍵值過濾

<?php
$fruits = [
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple',
];

while (($name = current($fruits)) !== false) {
    if ($name === 'apple') {
        echo key($fruits) . PHP_EOL; // fruit1, fruit4, fruit5
    }
    next($fruits);
}

進階:生成器替代指針操作

PHP 5.5+ yield 可構建惰性迭代器,避免手動指針管理:

function filterApples(array $arr): Generator {
    foreach ($arr as $k => $v) {
        if ($v === 'apple') yield $k => $v;
    }
}
foreach (filterApples($fruits) as $k => $v) { echo $k; }

最佳實踐

  1. 優先使用 foreach,語義清晰、自動管理指針、支援引用修改。
  2. 2. 僅在需要隨機存取/非線性遍歷時使用指針函數 (如多指針合併、自定義迭代邏輯)。 3. 操作指針後若需再次 foreach,記得先 reset($arr),否則從上次位置開始。 4. each() 已棄用,勿在新代碼使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved