跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP编程数组函数怎么学_PHP数组函数学习汇总【详解】

学PHP数组函数应从真实问题出发而非死记硬背:用+保留左数组键优先级,array_merge()覆盖同名键并重排索引,array_replace_recursive()用于递归合并;in_array()须加严格模式参数true防类型转换陷阱;查键存在用array_key_exists()或isset();抽列用array_column();判空优先count()===0。 直接上手学比死记函数列表有效得多:PHP数组函数不是靠背下来的,而是靠在真实场景里反复用、踩坑、再修正形成的肌肉记忆。别从“array_merge() 是什么”开始,从“我要把两个用户列表合并,但不能丢掉 ID 键”这种问题出发。 遇到合并数组时键被重排或覆盖,先看用的是
+
还是
array_merge()
这是最常翻车的点。比如你有:
$a = ['id' => 1, 'name' => 'Tom']; $b = ['id' => 2, 'email' => 't@x.com'];
用
$a + $b
→
['id' => 1, 'name' => 'Tom', 'email' => 't@x.com']
(前者键保留) 用
array_merge($a, $b)
→
['id' => 2, 'name' => 'Tom', 'email' => 't@x.com']
(后者同名键覆盖前者) 立即学习 “ PHP免费学习笔记(深入) ”; 要保留第一个数组的键优先级,且不重排数字索引 → 用
+
要合并后统一重编号索引(如处理
$_POST['items'][]
多次提交)→ 用
array_merge()
要递归合并多维结构(比如用户配置 + 默认配置),别用这两个 → 改用
array_replace_recursive()
in_array()
查不到值?检查是否开了严格模式 写
in_array('1', [1, 2, 3])
返回
true
,但这是靠类型转换硬凑出来的,隐患很大。 实际中常见错误:
in_array(0, ['off', 'on'])
也返回
true
(因为
'off'
转成 int 是 0)。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 永远显式传第三个参数
true
:
in_array('1', [1, 2, 3], true)
→
false
查键是否存在,别用
in_array()
,改用
array_key_exists('key', $arr)
或
isset($arr['key'])
(注意
isset()
对
null
值返回
false
) 从多维数组里抽一列,别手动 foreach,直接用
array_column()
比如你有一组用户数据:
$users = [['id'=>1,'name'=>'A','role'=>'admin'], ['id'=>2,'name'=>'B','role'=>'user']]
,想拿所有
name
值。 别这么写:
$names = []; foreach ($users as $u) { $names[] = $u['name']; }
直接:
$names = array_column($users, 'name');
还能指定新数组的键:
array_column($users, 'name', 'id')
→
[1 => 'A', 2 => 'B']
PHP 7.4+ 支持传回调函数做转换,但多数情况不需要;真要加工,
array_map()
更直白 如果数据源是对象数组,
array_column()
不支持,得先
array_map('get_object_vars', $objs)
判断数组为空,别只用
empty()
empty([])
是
true
,没问题;但
empty([null])
也是
true
(因为
null
被判定为“空值”),而它其实长度是 1。 要确认数组**元素个数为 0** → 用
count($arr) === 0
要确认数组**没有有效值(全为 false/null/''/0 等)** → 才用
empty($arr)
对关联数组,
array_keys($arr)
配合
count()
没必要,
count()
本身已统计所有键值对 真正卡住人的,往往不是函数不会用,而是没意识到 PHP 数组同时承载了「有序列表」和「字典映射」两种语义——同一段代码里混用这两种意图,又不加约束,结果就是键莫名消失、顺序错乱、类型隐式转换出 bug。盯住你的数据结构到底要表达什么,函数只是工具。

相关文章