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

PHP 陣列指標操作詳解:current、next、prev、end、reset 實戰用法

     編輯:PHP 相關知識

PHP 陣列指標操作詳解:current、next、prev、end、reset 實戰用法

PHP 陣列內部維護一個「指標」指向當前元素。掌握指標操作函式,能高效實作迭代、查找、資料轉換等邏輯,避免不必要的 foreach 或計數器。

核心函式速查

函式功能回傳值指標移動
current($arr)取得當前元素值值 / false (指標越界)不移動
next($arr)指標前進一位,取得新當前值值 / false+1
prev($arr)指標後退一位,取得新當前值值 / false-1
end($arr)指標移至最後一個元素最後值 / false移至尾端
reset($arr)指標重置至第一個元素第一個值 / false移至頭部
key($arr)取得當前元素鍵名鍵名 / null不移動
each($arr)取得當前鍵值對並前進[key, value, 0, key] / false+1

基本範例

$transport = ['foot', 'bike', 'car', 'plane'];

echo current($transport); // foot
echo next($transport);    // bike
echo next($transport);    // car
echo prev($transport);    // bike
echo end($transport);     // plane
echo current($transport); // plane (指標未動)
reset($transport);
echo current($transport); // foot

實戰場景

1. 陣列首尾元素快速存取

$first = reset($arr);   // 重置並取首
$last  = end($arr);     // 移至尾並取尾
// 注意:end() 會改變指標,後續 current() 會是最後元素

2. 手動控制迭代(如需中途跳出、回退)

while (($val = current($data)) !== false) {
    if (shouldSkip($val)) {
        next($data);
        continue;
    }
    if (needReprocess($val)) {
        prev($data); // 回退重處理
        continue;
    }
    process($val);
    next($data);
}

3. 陣列去重並保持順序(利用指標特性)

function uniqueKeepOrder(array $arr) {
    $seen = [];
    reset($arr);
    while (($val = current($arr)) !== false) {
        $k = key($arr);
        if (isset($seen[$val])) {
            // 刪除當前元素,指標自動指向下一個
            unset($arr[$k]);
        } else {
            $seen[$val] = true;
            next($arr);
        }
    }
    return array_values($arr); // 重建索引
}

4. 多陣列同步遍歷(如 CSV 欄位對齊)

$headers = ['id', 'name', 'email'];
$values  = [1, 'John', 'john@example.com'];

reset($headers); reset($values);
while (($h = current($headers)) && ($v = current($values))) {
    echo "$h => $v\n";
    next($headers); next($values);
}

注意事項與陷阱

  1. 參數必須是變數:函式接受引用,next(['a','b']) 會報錯「Only variables should be passed by reference」。
  2. 指標屬於陣列副本:$b = $a; next($a); 不影響 $b 的指標(PHP 陣列寫時複製)。
  3. false 與布林值元素衝突:陣列含 false 時,無法用回傳值判斷結束。改用 key($arr) !== null 或 foreach。
  4. 不要在 foreach 中混用指標函式:foreach 會重置指標,導致不可預期行為。
  5. 大陣列效能:指標操作為 O(1),但頻繁 unset 導致重建索引較慢;大量資料優先考慮 array_filter、array_values 等內建函式。

現代替代方案

  • ArrayIterator / IteratorIterator:物件導向封裝,支援 seek()、valid()、current()、next()、key(),可實作自訂迭代邏輯。
  • Generator (yield):惰性產生序列,記憶體友善,適合大資料流處理。
  • 集合庫:illuminate/support Collection、ds\Vector 提供鏈式操作、不可變資料結構。

理解陣列指標機制,能在特定場景下寫出更精簡、高效的程式碼。日常開發中,優先使用 foreach、陣列函式、Collection 等高層抽象,僅在需要精確控制迭代位置時才直接操作指標。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved