php索引文件怎么设,PHP多维数组根据值搜索对应的键?
引言
我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。
学习时间最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。
假如原始数组是如下图一样的关联数组。
程序逻辑很简单,我们使用代码实现一下:
function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }
这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。
使用起来是这样的:
$id = searchForId('100', $userdb);
执行结束后,输出应该为0。
当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。
我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。
总结为代码,就一行:
$key = array_search('100', array_column($userdb, 'uid'));
执行结果跟上面的 searchForId 函数一致。
深入讨论上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:
$key = array_search(40489, array_column($userdb, 'uid'));
但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?
其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:
$keys = array_keys(array_column($userdb, 'uid'), 40489);
你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。
再进一步。
上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
写在最后本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
php数组的索引格式?
php数组的索引格式数组可分为三种类型:1、索引数组,一般表示数组元素在数组中的位置,它由数字组成,下标从 0 开始,数字索引数组默认索引值就是从数字 0 开始的,不需要特别指定,PHP 会自动为索引数组的键名赋一个整数值,然后从这个值开始自动增量,当然,也可以指定从某个位置开始保存数据。
2、关联数组,其下标(键名)由数值和字符串混合的形式组成;
3、多维数组,包含一个或多个数组的数组。
PostgreSQL与MySQL相比?
当我们选择哪种数据库对我们的项目最合适时,必须在数据库之间进行比较。PostgreSQL和MySQL都是开源社区提供的两种最广泛的数据库。这两个数据库都有其优点和缺点,因此更好的选择取决于特定的要求和目标。
MySQLMySQL是一种开放源代码且流行的数据库管理系统,用于管理 关系数据库 。Oracle提供了访问和管理该数据库的支持。与其他数据库相比,它是快速,可伸缩且易于使用的数据库管理系统。它通常与PHP脚本一起使用,以创建功能强大且动态的服务器端或基于Web的企业应用程序。
PostgreSQLPostgreSQL 是一个先进的,开放源代码的[对象]-关系型数据库管理系统,它的主要目标是实现标准和可扩展性. PostgreSQL, 或者说是 Postgres, 试图把对 ANSI/ISO SQL标准的采用与修正结合起来。
对比其他的RDBMS, PostgreSQL以它对于对象-关系和或关系型数据库功能,比如对于可靠事务,例如原子性,一致性,隔离性和持久性(ACID)的完全支持,这些东西的高度需求和集合的支持,以示其独特性。
PostgreSQL是高度可编程的, 因而可以使用被称作“存储过程”的自定义程序进行扩展. 这些功能可以被创建用来简化一个重复、复杂并且常常需要数据库操作的任务的执行。
PostgreSQL比MySQL的优势1、PostgreSQL是一个非常安全,独立且功能丰富的开源数据库。
2、PostgreSQL支持许多高级数据类型,例如多维数组,用户定义的类型等。
3、PostgreSQL很好地遵循了SQL标准,并支持“高级” SQL内容,例如窗口函数或公共表表达式。
4、它提供了Oracle和SQL Server支持的所有性能优化。
MySQL比PostgreSQL的优势1、就数据库排名而言,MySQL比PostgreSQL更受欢迎。
2、在MySQL中,获得社区支持和搜索答案比PostgreSQL更容易。
3、复制是在MySQL而非PostgreSQL中很好地实现的。
如有不同观点,欢迎发表评论。如果喜欢我的回答,欢迎“点赞、分享”。
java应该学习什么?
ava后端相较于前端来说发展前景要好一些,待遇也相对应要高一些,只不过学习难度要比前端大一些。就业方向的话大多就是往架构方向升,因为后端学的比较全面所以往架构方向发展比较简单,另外的话往管理岗发展也是可以。这里整理了一份Java架构学习路线,是现在一下互联网公司比较主流的技术,分享给大家
框架源码系列并发编程系列分布式系列性能调优系列微服务系列项目实战系列互联网工程希望对大家有所帮助!
如何编写程序实现图书管理系统的个人图书借阅查询功能?
我们要做图书管理系统的话,先就需要分析,图书管理系统的核心是做什么?
图书管理、图书管理,自然管理好书是核心,那书的数字化就是必须的功能了,怎么管理呢?在实际的图书馆中,书都是放在一个固定的书架上,而我们的书架都是有相对应的编号的。并且,不同的图书,还有不同的分类。例如:历史类的书籍在一个区域、科学类的书籍在一个区域。根据这些现实场景,自然就需要将这些书籍管理相关的数据还原在系统上。
那么,书、书架、区域的简单关系也就出来了。
但是,如果书籍仅仅是待在书架上,位置都不发生变化,这个图书管理系统就仅仅是一个书籍的索引系统,想要丰富功能,我们就需要考虑到围绕书还会有什么行为呢?借阅就是图书馆中发生得比较频繁的一个行为了。我作为借书者,我会需要将我喜欢的书借走,然后再归还。
那针对这个场景,我们的书籍管理功能也就会发生了变化,我们首先需要知道,能够借书的人都是谁,这就需要对借阅者有一个用户管理的功能。那如果可能,还会有押金管理的功能。
其次就是对书的操作要有一个管理。借阅者什么时候借了书,什么时候还了书,借了多久等等。这样,在图书馆管理员盘点所有的书籍时,他就能够知道每本书的下落。如果这本书既没有借出去,也没有在图书馆里,可能就是丢失了。
那么,我们就围绕着上面说的内容,进行相关的数据库设计,功能设计,然后通过代码来实现。当然,这里面还需要有很多的基础数据管理的功能,例如:对于书的分类定义,书架的分类定义,区域的分类定义,这样,我们才能够引导管理员将散落的书籍快速的归还到对应的书架上。
而有了这些简单的功能后,一个图书管理系统也就完成了。但是,这样的系统要投入到实际的应用中,还非常的简陋,肯定还需要有更多的优化。还需要哪些优化呢?首先,用户在借书的时候,如果一本一本书的去查询然后录入借书信息,速度会非常的慢。同样,用户还书以后,图书管理员一本一本的去查询然后录入还书记录也是非常的慢的,并且还容易出错。
怎么能够加快这个借还书的过程呢?
一个简单的方式就是,给每本书都加上一个身份。这个身份比较简单的就是使用书本自身的GS1编码。不过,有的书可能没有GS1编码,但是也需要能够管理。那么我们就打印一个二维码的标签,贴到每本书上。
那么在借书的时候,就好像超市买东西一样,扫一下就可以了。而用户的借书证上,也有一个二维码。通过操作结束,然后扫描用户借书证和书籍上的二维码完成借书。还书也是一样。
这样,还书和借书的时间就被大大的缩短了,并且操作难度也大大降低了。
借还书的过程虽然优化了,但是盘点的难度还是很高。那么大一个图书馆,那么多的书,盘点的时候,一本书一本书的去扫描,就算有二维码,也是一个大工程。在这个方面能够如何优化呢?还是围绕着书本上的二维码来思考。二维码需要通过摄像头等设备来扫描,虽然在盘点时比较麻烦。那么如果能够不扫描,批量的进行图书的识别就可以很好的解决这个问题了。
那么,我们就可以考虑RFID的物联网技术。将原来书本上贴的二维码升级成为RFID标签。然后原有的二维码扫描设备升级成为RFID扫描设备。RFID是通过射频技术来做到识别的,并且也是一本书一个身份ID写入到RFID标签中。所以,判断时,我们只需要一个RFID终端,就可以在不把书拿出书架的情况下,批量的进行书本的盘点了。
以上,一个完整的图书管理系统就搞定了。当然,我们这里只是讲了概念,还有很多具体的细节和实现上,就还需要个人去摸索了。