3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效

[复制链接]

下载好向圈APP可以快速联系圈友

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
引言

我们讲授了很多种PHP数组操纵的援用处景。明天我们接着分享这方面的常识,说一说对于多维数组,若何按照值搜索,并返回数组的索引值。

3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效-1.jpg

进修时候

最起头我们习惯于跟从本能写代码,下认识地起头用 for 循环,对数组停止遍历,然后挨个比对,假如值相称,就返回索引值,假如没有婚配上,就是不存在。

假如原始数组是以下图一样的关联数组。

3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效-2.jpg

法式逻辑很简单,我们利用代码实现一下:
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 :_)


我是 @法式员小助手 ,延续分享编程常识,接待关注。
温馨提示:
好向圈www.kuaixunai.com是一个专业经验分享交流平台,你可以在这里发布专业经验,也可以发布需求与服务,禁止带推广链接、联系方式、违法词等,违规将封禁账号。 下载好向圈APP可以随时随地交流经验,也可以和圈友发起聊天成为好友哦!
如果想要各大搜索引擎收录,请使用秘塔写作猫进行内容伪原创
回复

使用道具 举报

已有(2)人评论

跳转到指定楼层
考依雪 发表于 2020-10-2 14:41:38
转发了
回复

使用道具 举报

蕙质兰心318 发表于 2020-10-2 14:48:18
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本圈子积分规则