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

PHP 陣列排序函數完整指南:array_values、array_walk、arsort 等實戰詳解

     編輯:PHP 綜合知識

PHP 陣列操作與排序函數深度解析

陣列是 PHP 中最核心的資料結構之一。本文系統整理了 array_values、array_walk、arsort、asort、compact、extract、count、current 等常用函數的用法、參數與實戰範例,幫助開發者靈活駕馭陣列資料。

1. array_values() - 重置數字索引

返回陣列所有值並重新建立從 0 開始的數字索引,適合處理 array_flip 後的陣列。

<?php
$arr = array("a", "b", "c");
$arr = array_flip($arr); // 索引值互換
$arr = array_values($arr); // 重置索引
print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 )
?>

2. array_walk() - 遍歷並修改陣列元素

對陣列每個元素套用使用者自訂函數,僅處理第一維。透過引用參數可直接修改原陣列。

<?php
$arr = array('a', 'b', 'c');
array_walk($arr, 'test');
function test(&$val, $key) {
    $val = 'x_' . $val;
}
print_r($arr); // Array ( [0] => x_a [1] => x_b [2] => x_c )

// 攜帶額外參數
array_walk($arr, 'test2', 'prefix_');
function test2(&$val, $key, $prefix) {
    $val = $prefix . $val;
}
?>

3. arsort() / asort() - 保持鍵值關聯的排序

  • arsort():降序排序(值從大到小)
  • asort():升序排序(值從小到大)

兩者皆保持鍵與值的對應關係,僅處理第一維。

<?php
$arr = array('a' => 'a', 'b' => 'b', 'c' => 'c');
arsort($arr); // Array ( [c] => c [b] => b [a] => a )
asort($arr);  // Array ( [a] => a [b] => b [c] => c )
?>

4. compact() / extract() - 變數與陣列互轉

  • compact():將變數名稱作為鍵、變數值作為值建立陣列。
  • extract():將陣列鍵作為變數名、值作為變數值匯入符號表,支援覆蓋、跳過、加前綴等衝突處理策略(EXTR_OVERWRITE、EXTR_SKIP、EXTR_PREFIX_SAME、EXTR_PREFIX_ALL)。
<?php
$a = "變數a"; $b = "變數b";
$arr = compact('a', 'b'); // array('a'=>'變數a', 'b'=>'變數b')
extract($arr, EXTR_PREFIX_SAME, 'pre'); // 衝突時加前綴
?>

5. count() / current() 族群 - 計數與指標操作

  • count($arr):返回元素個數。
  • current($arr)、next()、prev()、end()、reset()、key():內部指標導航,配合 each() 或 foreach 使用。
<?php
$arr = array('a', 'b', 'c');
echo current($arr); // a
echo next($arr);    // b
echo end($arr);     // c
echo prev($arr);    // b
echo key($arr);     // 1
reset($arr);        // 重置指標到開頭
?>

實務建議

  • 排序大型陣列時,優先使用內建函數(sort、usort、array_multisort),效能優於自行實作演算法。
  • array_walk 遞迴處理多維陣列需自行實作或改用 array_walk_recursive(PHP 5+)。
  • 使用 extract 時務必小心變數污染,建議搭配 EXTR_PREFIX_ALL 避免覆蓋既有變數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved