Php数组函数中的那些什么sort排序函数是不是很乱? 可以这样看。以及php搜索给定的值在数组中最后一次出现的位置的实现思考

news2024/9/25 9:35:14

一、Php数组函数中的那些什么sort排序函数是不是很乱? 可以这样看

    PHP的数组函数真不少,甚至对一个程序员来说,在其整个程序生涯中有些方法他永远也不会用上。不过每一个方法都有其价值、或者在出现的时候有其价值。所以偶尔有空时还是可以去看看。在这些方法中比较烦的估计就是这些什么sort之类的函数吧。asort,ksort,rsort,krsort等等,看起来真的比较乱,复制粘贴一下,看下面总共12个函数,可以归为2类。一个是简单的排序函数共9个,剩下的3个主要涉及自然排序,估计在对一些涉及字母+数字的文件名排序上比较有用。函数列表如下:

#. 简单排序函数

arsort — 对数组进行逆向排序并保持索引关系
asort — 对数组进行排序并保持索引关系
sort — 对数组排序
uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort — 使用用户自定义的比较函数对数组中的键名进行排序
usort — 使用用户自定义的比较函数对数组中的值进行排序
krsort — 对数组按照键名逆向排序
ksort — 对数组按照键名排序
rsort — 对数组逆向排序

#. 其它排序函数

natsort — 用“自然排序”算法对数组排序
natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
array_multisort — 对多个数组或多维数组进行排序

函数一看基本也明白意思,不过在对上面9个排序函数看的时候,是不是能发现它们之间有些联系,但好像又挺乱的?是的,有点乱。所以我把上面9个函数画成了一个图,比较直观,如下:

5ae249480811df6ce89d5860b4e47e3e.png

    上图能比较清楚地展示这9个sort函数之间的关系,可看到从sort基础排序函数出发,可以向四个方向演变,包括降序排序、以键名排序、以用户函数排序和保持索引关系进行排序。然后ksort和rsort合并到krsort; asort和rsort合并到arsort; usort和asort合并到uasort; ksort和usort合并到uksort。 这样一看是不是少了几个合并分支呢?是的。这四个方向排列组合应该有6种可能,还剩下两种组合:

1,asort和ksort的合并:想像一下,使用ksort是使用键名进行排序,本身就会保持索引关系,这正是asort的功能,所以不会存在这种合并。

2,usort和rsort的合并:这种组合看起来的确是合理的,不过有点多余,因为usort本身是用户自定义的索引排序,升序降序在自定义函数中即可以通过比较关系来实现。所以也没有这种合并。

    故排序函数就只有9种了。

二、php搜索给定的值在数组中最后一次出现的位置

    php的数组函数很多,功能也很强大,但如果要想实现搜索给定的值在数组中最后一次出现的位置,Php数组中可真是没有这样的函数。例如要在$array数组中查找789值(不区分类型),可以使用什么方法呢?最low的当然可以使用循环,循环之后最后一次赋值即获取到了最后一个KEY。代码如下:

<?php
#给定一个变量
$needle = 789;

#给定待查询的数组
$array = array('hello', '1', 789,'this is a test', 'another', 789, array('array', 'funcion'), '789', 'the same type', '789');

#使用循环的方法
$key = false;
foreach($array as $k=>$v){
   $v == $needle && $key = $k; 
}
var_dump($key);

    但我们要熟练使Php、深入使用Php,一定要更多的利用php已有的方法和功能,不然即便编程多年,也会觉得自己懂得很肤浅。PHP的数组函数中虽然没有直接实现搜索给定的值在数组中最后一次出现的位置的函数,但是可以结合已有的数组函数来使用。说到这里你也许想到了php里面有一个array_search函数能直接用,不过很遗憾, 使用array_search函数搜索,即使要搜索的值在被搜索的数组中出现不止一次,array_search只返回第一个匹配的键。 所以只使用array_search是不行的。但我们还是可以利用array_search函数的。如下我们可以先得到一个数组单元顺序相反的数组,再用array_search函数搜索即能实现。代码如下:

<?php
#需要注意array_reverse需要使用第二个参数来保持索引关系
var_dump(array_search($needle, array_reverse($array, true)));

还有没有别的办法呢?还有的。还有一个array_keys函数,这个函数一般用于返回 input 数组中的数字或者字符串的键名。 但它第二个参数也可以实现指定搜索值,从而只返回该值的所有键名。

<?php
#结合使用end和array_keys函数来实现
var_dump(end(array_keys($array, $needle)));

 还有没有别的办法呢?想了一下,还有的。

<?php
#使用array_flip先交换数组中的键和值,然后直接判断是否有要查找值为needle的key.
$temparr = array_flip($array);
var_dump($temparr[$needle]??false);

    还有没有别的办法呢?哈哈,我没有想到,欢迎补充。

    上面的方法虽然都可行,但有的是有一定限制的。array_flip操作中数组的值需要能够作为合法的键名,它必须是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键值对将不会反转。并且上面的示例中查找的时候是不考虑类型的,如果考虑类型,最后使用array_flip的方法就不可以了。而array_search函数和array_keys都可以通过第三个参数指定是否是strict检查模式,从而仍可以使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程:线程池(下)

一、线程池常用的阻塞队列有哪些&#xff1f; 新任务来的时候会先判断当前运行的线程数量是否达到核心线程数&#xff0c;如果达到的话&#xff0c;新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列&#xff0c;我们可以结合内置线程池来分析。 容量为 Integer…

UE5 半透明阴影 快速解决方案

Step 1&#xff1a; 打开该选项 Step 2&#xff1a; 将半透明材质给到模型后&#xff0c;设置光照的Shadow Resolution Scale&#xff0c;越大&#xff0c;阴影的效果越好 Step 3&#xff1a; 用这种方式去做&#xff0c;阴影会因为半透明的程度&#xff0c;降低阴影的浓度 要…

Spring security 动态权限管理(基于数据库)

一、简介 如果对该篇文章不了解&#xff0c;请移步上一篇文章&#xff1a;spring security 中的授权使用-CSDN博客 当我们配置的 URL 拦截规则请求 URL 所需要的权限都是通过代码来配置的&#xff0c;这样就比较死板&#xff0c;如果想要调整访问某一个 URL 所需要的权限&…

【专项刷题】— 队列

1、N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 每次遍历一层节点的时候就把当前节点的值添加到列表中再将当前层的节点的子节点添加到队列中每次遍历完一层之后就添加到总表中代码&#xff1a; public List<List<Integer>> levelO…

如何远程实时监控员工的电脑屏幕?远程桌面监控的五个可实现方法分享

想象一下&#xff0c;你在办公室喝着咖啡&#xff0c;员工的电脑屏幕却在数百公里之外实时呈现在你的眼前。你可以看到他们在干什么&#xff0c;是埋头工作还是悄悄摸鱼&#xff1f;远程桌面监控让这一切变得触手可及&#xff0c;简直像给了管理者一双“千里眼”&#xff01; 如…

RedisTemplate操作String的API

文章目录 1 String 介绍2 命令3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 1 String 介绍 String 类型…

9.10-AutoAWQ代码解析

1、首先要去官网下载源码。https://github.com/casper-hansen/AutoAWQ.githttps://github.com/casper-hansen/AutoAWQ.git 2、git clone后&#xff0c;下载AutoAWQ所需环境。 pip install -e . 3、查看quantize.py代码&#xff0c;修改model_path部分&#xff0c;修改为想要量…

系统架构师考试学习笔记第四篇——架构设计实践知识(19)嵌入式系统架构设计理论与实践

本章考点&#xff1a; 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲&#xff0c;本课时知识点会涉及案例分析题&#xff08;25分&#xff09;。在历年考试中&#xff0c;案例题对该部分内容都有固定考查&#xff0c;综合知识选择题目中有固定分值…

您与该网站的连接不是私密连接,存在安全隐患

您与该网站的连接不是私密连接&#xff0c;存在安全隐患。 攻击者可能会试图窃取您的信息&#xff08;例如&#xff1a;密码、通讯内容或信用卡信息&#xff09;。为避免您的信息失窃&#xff0c;建议您停止访问该页面。了解详情 解决办法如下&#xff1a; 1、查看电脑时间&…

使用FastJson2将对象转成JSON字符串时,小数位“0”开头时转换出错

maven坐标&#xff1a; <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.40</version> </dependency> 问题现象&#xff1a; 问题原因&#xff1a; I…

IP路由选择

文章目录 1. 基本概念2. RIP(路由选择信息协议)3. OSPF 1. 基本概念 路由选择协议 路由选择协议让路由器能够动态地发现互联网络&#xff0c;并确保所有路由器的路由选择表都相同。路由选择协议还用于找出最佳路径&#xff0c;让分组穿越互联网络前往目的地的效率最高。RIP、R…

领夹麦克风哪个品牌好?无线领夹麦克风品牌大全,麦克风推荐

在这个全民直播、Vlog盛行的时代&#xff0c;一款轻便高效的无线领夹麦克风成了不少内容创作者的必备神器。但市面上产品五花八门&#xff0c;有的打着“超远传输、无损音质”的旗号&#xff0c;实则性能平平&#xff0c;甚至存在信号干扰、噪音大等问题&#xff0c;让人直呼交…

SpringBoot集成MyBatis-PlusDruid

目录 MyBatis-Plus简介 实例演示 创建Springboot项目 初始化Springboot项目 添加关键依赖 application.properties添加相关配置 启动类 编写实体类 编写mapper接口 条件构造器 分页插件 自定义 SQL 映射 MyBatis-Plus简介 MyBatis-Plus简介‌MyBatis-Plus‌&…

铁威马秋季新品即将上线,你想要的NAS我都有!

各位铁粉们&#xff0c;注意啦&#xff01; 一场关于存储的饕餮盛宴即将拉开帷幕 铁威马&#xff0c;带着九款全新力作NAS 将于9月19日席卷全球市场 是的&#xff0c;你没听错 九款&#xff01; 从入门级到专业级 从桌面型到机架式 全系搭载TOS 6 总有一款能击中你的心…

PCI 9054应用总结

1 PCI配置空间 1.1 BAR大小的确定 Linux kernel读取PCI BARn表示的内存长度时&#xff0c;先直接读取BARn的值&#xff0c;这个就是地址&#xff0c;然后再向BARn写入0xffff,ffff&#xff0c;再读取BARn的值就是需要的内存长度&#xff08;忽略bit3到bit0的处理&#xff09;&a…

微波无源器件 3 一种用于Ka频带双极化波束形成网络的双模三路功分器

摘要&#xff1a; 本文给出了一种用于Ka频带的双极化工作的双模3路功分器的设计和性能。对有着三个输出端口的平衡地很好的功分的TE10和TE01模式和27.5-30GHz上优于-23dB的输入匹配可以获得相似的性能。与双模定向耦合器相连结&#xff0c;此三路功分器对于双极化波束形成网络具…

【Go】Go语言介绍与开发环境搭建

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Qt篇——Qt获取Windows电脑上所有外接设备的名称、物理端口位置等信息

我之前有发过一篇文章《Qt篇——获取Windows系统上插入的串口设备的物理序号》&#xff0c;文章中主要获取的是插入的USB串口设备的物理序号&#xff1b;而本篇文章则进行拓展&#xff0c;可以获取所有外接设备的相关信息&#xff08;比如USB摄像头、USB蓝牙、USB网卡、其它一些…

膨胀腐蚀操作opencv dilate膨胀白膨胀,erode腐蚀是黑吃白。主要针对二值图

效果&#xff1a; 代码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as pltif __name__ "__main__":h 10w 10data np.random.normal(0, 1, [h, w]) # sigma, 2*sigma, 3*sigma之间的数的比例分别为0.68&#xff0c; 0.96&#…

甲骨文新财报云基建营收同比增长45%,与亚马逊AWS合作,盘后涨超9%

KlipC报道&#xff1a;当地时间9月9日&#xff0c;数据库软件与云服务龙头甲骨文发布截止8月份的2025财年第一财季财报&#xff0c;财报显示&#xff0c;营业收入133亿美元&#xff0c;同比增长7%&#xff1b;净利润 29.29 亿美元&#xff0c;同比增长21.03%。盘后大涨超9%。 …