推荐用[]定义空数组,语义清晰且效率略高;for循环中预分配索引适合已知长度场景;foreach中直接追加元素更简洁可控。

PHP中定义空数组看似简单,但结合循环动态赋值时,不同写法会影响性能、可读性和健壮性。关键不是“能不能用”,而是“哪种方式更合适”。
基础定义:推荐用 [] 而非 array()
PHP 5.4+ 支持短数组语法,更简洁且执行效率略高:
- $list = []; ✅ 推荐,语义清晰、书写轻量
- $list = array(); ⚠️ 兼容老版本可用,但冗余
注意:不要写成 $list = null; 或 $list = "";,这会导致后续 foreach 报错或静默失败。
for 循环中预分配索引:适合已知长度的场景
若提前知道要存入多少个元素(比如处理固定行数的数据库结果),预设数组长度可减少内存重分配:
立即学习“PHP免费学习笔记(深入)”;
- 用 array_fill(0, $count, '') 初始化带默认值的数组
- 再用 for ($i = 0; $i 直接赋值,避免
[]自动追加的隐式扩容
示例:生成 100 个带序号的用户昵称
$users = array_fill(0, 100, '');<br>for ($i = 0; $i < 100; $i++) {<br> $users[$i] = 'user_' . str_pad($i + 1, 3, '0', STR_PAD_LEFT);<br>}
foreach 处理已有数据时:直接展开赋值最自然
从另一个数组、API 返回结果或对象属性中提取数据时,直接在 foreach 中 push 或键名映射即可:
- 追加新元素:$result[] = $item['name'];
- 按条件筛选并结构化:$activeUsers[$item['id']] = $item['email'];
- 避免在循环内反复调用
count()或array_push(),前者低效,后者不如[]直观
小技巧:如果需去重或合并,可在循环中配合 isset() 或 !in_array() 判断,而非先全量生成再调用 array_unique()。
while 循环配合数据库游标:边取边存,节省内存
处理大量数据时(如导出万级记录),不建议一次性 fetchAll() 再循环,而应逐行 fetch 并动态构建数组:
- $rows = []; 初始化空数组
- while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $rows[] = $row; }
- 若只需部分字段,可当场加工:$rows[] = ['id' => $row['id'], 'title' => trim($row['title'])];
这样既控制内存占用,又保持逻辑清晰,比先取全部再 array_map() 更可控。



















