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

PHP 數組操作完全指南:定義、創建、遍歷與進階技巧

     編輯:PHP 綜合知識

數組定義基礎

<?php
// 短語法 (PHP 5.4+)
$numbers = [1, 3, 5, 7, 9];
$colors  = ['red', 'blue', 'green'];

// 自定義鍵值
$language = [
    1 => 'English',
    3 => 'Chinese',
    5 => 'French',
];

// 多維數組
$twoDim = [
    'color' => ['red', 'blue'],
    'week'  => ['Monday', 'Friday'],
];

// 空數組
$result = [];

數組創建函數大全

1. compact() — 變量轉數組

<?php
$number = '1,3,5,7,9';
$string = "I'm PHPer";
$array  = ['And', 'You?'];

$newArray = compact('number', 'string', 'array');
// 結果:['number' => '1,3,5,7,9', 'string' => "I'm PHPer", 'array' => ['And', 'You?']]

// 反向操作:extract()
extract($newArray);
// 現在擁有 $number, $string, $array 三個變量

2. array_combine() — 兩數組合併為鍵值對

<?php
$keys   = ['1', '3', '5', '7', '9'];
$values = ['I', 'Am', 'A', 'PHP', 'er'];

$combined = array_combine($keys, $values);
// 結果:['1' => 'I', '3' => 'Am', '5' => 'A', '7' => 'PHP', '9' => 'er']

3. range() — 範圍數組

<?php
range(0, 100, 10);   // [0, 10, 20, ..., 100] 步進 10
range('A', 'Z');     // ['A', 'B', ..., 'Z']
range('z', 'a');     // ['z', 'y', ..., 'a'] 支援倒序

4. array_fill() / array_fill_keys() — 填充數組

<?php
// 填充值
array_fill(0, 5, ['a', 'b', 'c', 'd']);
// 5 個元素,每個都是 ['a','b','c','d']

// 指定鍵名填充
$keys = ['string', '2', 9, 'SDK', 'PK'];
array_fill_keys($keys, 'testing');
// ['string' => 'testing', '2' => 'testing', ...]

數組遍歷方式對比

1. foreach(推薦,最通用)

<?php
$speed = [50, 120, 180, 240, 380];

// 僅值
foreach ($speed as $value) { ... }

// 鍵值對
foreach ($speed as $key => $value) {
    echo "$key => $value\n";
}

// 修改原值(引用)
foreach ($speed as &$value) {
    $value *= 2;
}
unset($value); // 釋放引用

2. while + list() + each()(舊式,不推薦新代碼)

<?php
$staff = [
    ['姓名', '性別', '年齡'],
    ['小張', '男', 24],
    ['小王', '女', 25],
];

while (list($key, $value) = each($staff)) {
    list($name, $sex, $age) = $value;
    echo "$name\t$sex\t$age\n";
}

3. for 循環(數值索引數組)

<?php
$speed = range(0, 220, 20);
$count = count($speed);

for ($i = 0; $i < $count; $i++) {
    echo $speed[$i] . ' ';
}
// 輸出:0 20 40 60 80 100 120 140 160 180 200 220

4. 現代替代方案

需求推薦函數示例
只遍歷值array_walk()array_walk($arr, fn($v) => ...)
遍歷並轉換array_map()array_map(fn($v) => $v*2, $arr)
過濾元素array_filter()array_filter($arr, fn($v) => $v > 100)
歸約計算array_reduce()array_reduce($arr, fn($c,$v) => $c+$v, 0)
鍵值同時操作array_walk() / foreach需修改鍵時用 foreach

實用技巧集錦

數組去重

<?php
$unique = array_unique([1, 2, 2, 3, 3, 3]); // [1, 2, 3]
// 保持鍵名不變,如需重新索引:
$reindexed = array_values(array_unique($arr));

數組合併與差集

<?php
$a = ['a' => 1, 'b' => 2];
$b = ['b' => 3, 'c' => 4];

$a + $b;              // 聯合:['a'=>1, 'b'=>2, 'c'=>4] (左優先)
array_merge($a, $b);  // 合併:['a'=>1, 'b'=>3, 'c'=>4] (右覆蓋,數值鍵重新索引)
array_diff($a, $b);   // 差集:['a' => 1] (值不同)
array_intersect($a,$b); // 交集:['b' => 2] (鍵值皆同)

多維數組排序

<?php
$users = [
    ['name' => '張三', 'age' => 25],
    ['name' => '李四', 'age' => 20],
    ['name' => '王五', 'age' => 30],
];

// 按年齡升序
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

// 多字段排序:先按年齡升序,同齡按姓名降序
usort($users, fn($a, $b) => 
    [$a['age'], -strcmp($a['name'], 'z')] <=> [$b['age'], -strcmp($b['name'], 'z')]
);

數組扁平化

<?php
$nested = [[1, 2], [3, [4, 5]], 6];

// 遞歸扁平化
function flatten(array $arr): array {
    $result = [];
    array_walk_recursive($arr, fn($v) => $result[] = $v);
    return $result;
}
flatten($nested); // [1, 2, 3, 4, 5, 6]

效能提示

  • 預分配大小:大數組用 $arr = []; $arr[10000] = null; unset($arr[10000]); 預留空間
  • 避免循環中 count():預存 $len = count($arr)
  • 引用修改:foreach ($arr as &$v) 避免複製,用畢 unset($v)
  • 嚴格類型:PHP 8.1+ 使用 array 類型聲明獲取靜態分析優化

掌握這些核心操作,PHP 數組處理將得心應手!

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