直接写三行可运行代码比背概念更高效;推荐用[]定义数组,foreach遍历(避免for/while),用is_array()和empty()安全判断非空数组,+与array_merge()合并逻辑不同,需注意键处理规则。

别从“数组是什么”开始学,直接动手写三行能跑的代码,比背概念快十倍。
用 [] 而不是 array()) 创建数组
PHP 5.4+ 全面支持短数组语法,[] 更轻、更直观、少打字,且 IDE 和静态分析工具对它的支持更好。老教程里满屏 <code>array("a", "b") 已过时。
- 写
$users = ["alice", "bob", "charlie"];,别写$users = array("alice", "bob", "charlie"); - 关联数组同理:
$config = ["host" => "localhost", "port" => 3306]; - 混用也合法:
$mixed = [0 => "first", "type" => "string", 1 => "second"];,但不推荐,易读性差
foreach 是唯一该用的遍历方式
别碰 for 遍历索引数组、更别用 while + each() —— 后者在 PHP 7.2+ 已废弃,for 容易越界或漏元素,尤其当数组键不连续时。
- 只取值:
foreach ($list as $item) { echo $item; } - 要键和值(尤其是关联数组):
foreach ($user as $key => $value) { echo "$key: $value"; } - 千万别在
foreach循环体里用unset($arr[$key])或$arr[] = ...,会跳过后续元素;真要删,先用$keys = array_keys($arr); foreach ($keys as $k) { unset($arr[$k]); }
count() 返回 0 不代表数组为空
count() 对 null、false、"" 都返回 0,但它不检查变量是否为数组。直接 count($data) 前没做类型判断,线上就可能报 Warning 或逻辑错。
- 安全写法:
is_array($data) && count($data) > 0 - 想确认是「非空数组」,用
!empty($data) && is_array($data)更稳妥(empty()对空数组返回 true,对null也返回 true) - 多维数组要总数?加
COUNT_RECURSIVE:count($matrix, COUNT_RECURSIVE)
+ 和 array_merge() 合并结果完全不同
这是最常踩的坑:以为两者只是写法不同,其实语义根本不一样。一个保留原键,一个重排索引;一个不覆盖关联键,一个覆盖。
-
$a = ["x" => 1]; $b = ["x" => 2]; $c = $a + $b;→$c["x"]还是1(左边优先) -
$c = array_merge($a, $b);→$c["x"]变成2(右边覆盖) - 索引数组:
[1,2] + [3,4]得[0=>1, 1=>2, 2=>3, 3=>4];array_merge([1,2], [3,4])结果一样,但这是巧合 —— 因为+对数字键是按索引合并,而array_merge强制重编号 - 混合键数组慎用
+,容易键冲突丢失数据;不确定时,用array_merge更可预测
真正卡住人的从来不是语法,而是键名处理、类型隐式转换、引用与拷贝这些暗处的规则。写完每行数组操作,心里默念一遍「这个键存在吗?值可能是 null 吗?我是在改原数组还是副本?」—— 这比记住所有函数名有用得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











