PHP数组用处_PHP 数组函数妙用
巧妙利用php数组函数,解决二维数组查找问题
问题描述
最近在开发中遇到一个需求,突发奇想用php数组函数解决,在此记录一下。
问题简述:假设从数据表中取出所有同学成绩,需要按照如下规则进行查找数据:
1、找出所有同学中语文成绩最好的同学;
2、在1的基础上接着找到数学成绩最高的同学;
3、在2的基础上接着找到英语成绩最高的同学;
解决思路
刚遇到这个需求,第一反应就是不断循环数组进行查找过滤,思路没啥问题就是写出来代码过于丑陋,php毕竟是世界上最好的
语言,不可能没有其他处理办法,终于在一番头脑风暴之后找到下面思路:
* 利用array_column函数取得所有同学语文成绩;
* 接着用max函数找到语文最高分;
* 最后用array_filter过滤出语文最高分的同学们;
* 循环前三步,即可解决上述问题;
直接上代码
$grades = [
['name'=>'姓名一','语文'=>85,'数学'=>99,'英语'=>77],
['name'=>'姓名二','语文'=>85,'数学'=>99,'英语'=>77],
['name'=>'姓名三','语文'=>99,'数学'=>67,'英语'=>50],
['name'=>'姓名四','语文'=>99,'数学'=>67,'英语'=>90],
['name'=>'姓名五','语文'=>99,'数学'=>67,'英语'=>90],
['name'=>'姓名六','语文'=>99,'数学'=>55,'英语'=>77],
['name'=>'姓名七','语文'=>99,'数学'=>55,'英语'=>77],
['name'=>'姓名八','语文'=>86,'数学'=>88,'英语'=>90],
['name'=>'姓名九','语文'=>86,'数学'=>88,'英语'=>90],
['name'=>'姓名十','语文'=>86,'数学'=>88,'英语'=>90],
['name'=>'姓名1','语文'=>86,'数学'=>76,'英语'=>77],
['name'=>'姓名2','语文'=>86,'数学'=>76,'英语'=>60],
['name'=>'姓名3','语文'=>77,'数学'=>76,'英语'=>60],
];
// 找到语文最高分
$yuwenMax = max(array_column($grades,'语文'));
$grades = array_filter($grades,function($value) use ($yuwenMax) {
return $value['语文'] == $yuwenMax;
});
// 找到数学最高分
$shuxueMax = max(array_column($grades,'数学'));
$grades = array_filter($grades,function($value) use ($shuxueMax) {
return $value['数学'] == $shuxueMax;
});
// 找到英语最高分
$yingyuMax = max(array_column($grades,'英语'));
$grades = array_filter($grades,function($value) use ($yingyuMax) {
return $value['英语'] == $yingyuMax;
});
进一步精简代码
上述代码中,在找语文、数学、英语最高分的时候,代码基本相同,很容易想到可以用foreach循环处理,使上边的代码进一步简化。
代码如下
$columns = ['语文','数学','英语'];
foreach ($columns as $column) {
$max = max(array_column($grades,$column));
$grades = array_filter($grades,function($value) use ($max,$column) {
return $value[$column] == $max;
});
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
PHP数组用处_PHP 数组函数妙用相关推荐
- php 数组合并_PHP数组常用函数分类整理
微信公众号:PHP在线 PHP数组常用函数分类整理 一.数组操作的基本函数 数组的键名和值array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名arra ...
- php把数组合并,php数组合并_php数组合并、追加与连接的方法、array_combine函数)
摘要 腾兴网为您分享:php数组合并.追加与连接的方法.array_combine函数),微视,听中国,顺风车,拍照识别等软件知识,以及爱听360听书,粤省事app,爱车管家,二级域名分发系统,电脑连 ...
- php如何把两个array相加_php两个数组相加_PHP数组合并之array_merge和数组相加
摘要 腾兴网为您分享:PHP数组合并之array_merge和数组相加,万师傅,腾讯qq,时光机器,轻微课等软件知识,以及东莞市教育局,kkg黄金商城,mp3cutter,91算命,医疗,一爱,qq拼 ...
- PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快. 如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) - co ...
- php怎么比较数组长度_PHP获取数组长度的方法 函数参数的比较
在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧. php如何获取数组的长度,使用php函数 ...
- php中数组下标,PHP数组介绍_php
数组基础: php中,数组的下标可以整数,也可以是字符串 php中,数组的元素顺序不是由下标决定,而是由其"加入"的顺序决定 定义: $arr1 = array(元素1,元素2,. ...
- Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...
- 用子函数的方法求一个3*4的数组的转置数组
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容3]用子函数的方法求一个3*4的数组的转置数组 #incl ...
- php方法数组注释,php中的注释、变量、数组、常量、函数应用介绍
php中单引号与双引号的区别? 1. 由下可看出,双引号的变量是解析并输出,而单引号的变量不解析. 2.单引号的解析速度比双引号的快 3. 对于单引号来说,只有两个转义 \',\\ 4. 除了上述两个 ...
最新文章
- 深度学习~生成式对抗神经网络GAN
- java、oracle对CLOB处理
- html文本弹性,HTML5 很有趣的文本蹦床/弹性弯曲动效
- DBA跳槽应该去大公司还是小公司?99%的人这样说...
- 数学常用公式及规律、结论(一)
- 牛客多校第九场 ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解...
- 2022官网下载jdk8教程
- FPGA实验记录一:1位全加器设计
- 【微信小程序模板直接套用】微信小程序制作模板套用平台
- 浦发银行计算机基础知识题库,2018浦发银行面试经验(信息科技岗,总行信息技术岗等)...
- 计算机控制试题库 百度文库,计算机控制技术练习题附答案_百度文库.doc
- 怎么设置html z值,正态分布1.96 统计学,Z=1.96怎么来的
- 准备写个linux下的千千静听
- 立方度量(Cubic Metric)
- 复旦大学智能感知与无人系统实验室诚聘海内外超级博士后/博士后
- C语言基础---3.格式化输出总结---%d ,%s,%f %.3f,%m.ns 以及sprintf函数
- 基于Seq2Seq的问答摘要与推理问题方案
- 在私有云上创建虚拟机
- 多线程管程法(生产者消费者问题)
- 论坛发贴与跟贴的技巧
热门文章
- signature=0a26d8967069103efeee67346aac0529,Construction of Thinned Gated Single-Assignment Form
- 关于不能成为专业软件测试人员的10大理由的一些阐述
- C++——虚函数(Virtual Member Functions) 【functions语意学】
- SB Admin 2 学习笔记1
- 微软职位内部推荐-Principal Dev Manager
- [征求意见]关于增加Java技术区
- 快速搭建一个网关服务,动态路由、鉴权看完就会(含流程图)
- Netflix实用API设计 1:Protobuf FieldMask实践
- 告别硬编码,SpringBoot实现动态增删启停定时任务
- 雷军这个程序员!真的牛逼!