PHP 陣列機制獨特 (有序映射),建立與操作時有幾個關鍵行為必須理解,否則易產生難以預期的 Bug。
<?php
$arr = [5 => 'www.bianceng.cn', 123, 50];
// 索引 5 已存在,下一個 123 自動獲指派索引 6,50 獲指派 7
var_dump($arr);
/* 輸出:
array(3) {
[5]=> string(17) "www.bianceng.cn"
[6]=> int(123)
[7]=> int(50)
}
*/
?>
陷阱:混用指定索引與自動索引時,索引可能不連續、不從 0 開始,for ($i=0; $iforeach。
| 寫法 | 實際鍵名 | 說明 |
|---|---|---|
$arr[true] = 'a' | 1 | 布林 true → 整數 1 |
$arr[false] = 'b' | 0 | 布林 false → 整數 0 |
$arr[null] = 'c' | '' (空字串) | null 等同空字串鍵 |
$arr['123'] = 'd' | 123 (整數) | 數字字串鍵自動轉整數 (不含前導零) |
$arr['0123'] = 'e' | '0123' (字串) | 前導零字串保持字串型別 |
$arr[1.5] = 'f' | 1 | 浮點數截斷為整數 |
<?php
$arr[true] = 'hello';
$arr[null] = '北京';
echo $arr[1]; // hello
echo $arr['']; // 北京
?>
<?php
$arr[true] = 'www.bianceng.cn';
$arr[false] = '北京';
print_r($arr);
/* 輸出:
Array
(
[1] => www.bianceng.cn
[0] => 北京
)
*/
var_dump($arr);
/* 輸出:
array(2) {
[1]=> string(17) "www.bianceng.cn"
[0]=> string(6) "北京"
}
*/
?>
print_r:較易讀,適合快速檢視結構。var_dump:含型別、長度、索引型別,適合深度除錯。*RECURSION*),var_export 可輸出可執行 PHP 程式碼。<?php
$a = [2, 3];
print_r($a); // [0=>2, 1=>3]
$a[2] = 'www.bianceng.cn'; // 直接指派新索引,陣列自動增長
print_r($a); // [0=>2, 1=>3, 2=>'www.bianceng.cn']
?>
無需預先宣告大小,PHP 陣列本質為動態雜湊表 + 雙向鏈表,支援任意索引插入/刪除。
| 函式 | 用途 | 語法 | 範例 |
|---|---|---|---|
count | 統計元素個數 | count($arr [, mode]) | count($arr)、count($arr, COUNT_RECURSIVE) |
is_array | 判斷是否為陣列 | is_array($var) | if (is_array($x)) ... |
print_r | 人類可讀輸出結構 | print_r($arr [, true]) | print_r($arr)、$s = print_r($arr, true) |
var_dump | 完整型別/長度輸出 | var_dump($arr) | var_dump($arr) |
explode | 字串分割為陣列 | explode(分隔字串, 字串 [, limit]) | explode(' ', '北京 上海 天津') |
implode | 陣列合併為字串 (別名 join) | implode(分隔字串, $arr) | implode(',', [1,2,3]) |
sort | 值排序 (重設索引) | sort($arr [, flags]) | sort($arr, SORT_NUMERIC) |
<?php
$str = '北京 上海 天津 深圳 青島 廣州';
$arr = explode(' ', $str); // 空白分割
print_r($arr);
sort($arr); // 字典序排序
print_r($arr);
/* 排序後:
Array
(
[0] => 上海
[1] => 北京
[2] => 廣州
[3] => 天津
[4] => 青島
[5] => 深圳
)
*/
?>
<?php
$colors = ['red', 'blue', 'green', 'yellow'];
// for 迴圈 (僅適用連續整數索引)
for ($i = 0; $i < count($colors); $i++) {
echo $colors[$i] . '<br />';
}
// foreach (通用、推薦)
foreach ($colors as $key => $var) {
echo $var . '<br />';
}
?>
<?php
$arr[0] = 123; $arr[1] = 456; $arr[2] = 'hello';
unset($arr[1]); // 刪除索引 1
print_r($arr);
/* 輸出:
Array
(
[0] => 123
[2] => hello // 索引 2 保持不變,不會重排為 1
)
*/
// 若需重排索引:
$arr = array_values($arr); // [0=>123, 1=>hello]
?>
理解上述機制與函式,能避開 90% PHP 陣列操作陷阱,寫出可預期、可維護的資料處理程式碼。