【PHP】巧用PHP数据函数
整理自微信公众号:https://mp.weixin.qq.com/s/vpPLtYmat4Eiymn4ajGUmA
一、对于某些关联数组,有时候我们只想取指定键名的那部分,比如数组为 ['id' => 1, 'name' => 'zane', 'password' => '123456'] 此时若只想取包含 id 和 name 的部分:
1 2 3 4 5 | function newOnlyKeys( $array , $keys ) { return array_intersect_key ( $array , array_flip ( $keys )); } $raw = [ 'id' => 1, 'name' => 'zane' , 'password' => '123456' ]; var_dump(newOnlyKeys( $raw , [ 'id' , 'name' ])); // ['id' => 1, 'name' => 'zane'] |
解释:
array_flip:将数组的键和值对调,使数组 ['id', 'name'] 转变为了 ['id' => 0, 'name' => 1]。
array_intersect_key :使用键名比较计算数组的交集,也就是返回第一个参数数组中与其他参数数组相同键名的值。
二、移除指定键值
1 2 3 4 5 6 7 8 | raw = [ 'id' => 1, 'name' => 'zane' , 'password' => '123456' ]; function removeKeys( $array , $keys ) { return array_diff_key ( $array , array_flip ( $keys )); } // 移除 id 键 var_dump(removeKeys( $raw , [ 'id' , 'password' ])); // ['name' => 'zane'] |
三、确认数组中的的值全部为 true
1 2 3 4 5 6 | $power = [ 'read' => true, 'write' => true, 'execute' => true]; var_dump((bool) array_product ( $power )); // 结果 true $power = [ 'read' => true, 'write' => true, 'execute' => false]; var_dump((bool) array_product ( $power )); // 结果 false |
解释:
array_product 函数本来的功能是「计算数组中所有值的乘积」,在累乘数组中所有成员的时候会将成员的值转为数值类型。
当传递的参数为一个 bool 成员所组成的数组时,众所周知 true 会被转为 1,false 会被转为 0。然后只要数组中出现一个 false 累乘的结果自然会变成 0,然后我们再将结果转为 bool 类型不就是 false 了
注意:
使用 array_product 函数将在计算过程中将数组成员转为数值类型进行计算,所以请确保你了解数组成员转为数值类型后的值,否则会产生意料之外的结果。比如:
1 2 | $power = [ 'read' => true, 'write' => true, 'execute' => 'true' ]; var_dump((bool) array_product ( $power )); // 结果 false |
上例是因为 'true' 在计算过程中被转为 0。
四、数组中重复次数最多的值
1 2 3 4 5 6 | $data = [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8]; $cv = array_count_values ( $data ); // $cv = [6 => 2, 11 => 4, 2 => 2, 4 => 3, 7 => 1, 8 => 1] arsort( $cv ); $max = key( $cv ); var_dump( $max ); // 结果 1 |
得意时做事,失意时读书
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律