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

文章图片
引言
【新闻联播|3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效】我们讲解了很多种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 :_)
我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。
推荐阅读
- 国际动荡,俄白再通电话与恢复对伊制裁!| 20200817《新闻联播》解读
- 扶沟县|河南新闻联播《扶沟:改革创新增动力,“中原菜都”展新颜》在扶沟县引起强烈反响
- 大米嘚啵嘚历史短文|世人皆知“负荆请罪”,却不知长平之战后,蔺相如、廉颇的下场
- 曾经把钱输光的他,3分钟写的写的一首歌,一值的销量都无人打破
- 纪凌尘|十冠王登上新闻联播!易建联专门感谢一人,网友:CBA的牌面
- 3分钟学会科目三灯光操作,成都驾考课堂考试口诀
- 科学探索|德国曾经制造出飞碟,3分钟升到千米高空?德国投降后飞碟去哪了
- 摆摆鲸鱼君|八字短文案 漫漫星河 温暖人间
- 小玲美食记|发面饼怎样才蓬松柔软,不擀面不揉面,筷子一搅,3分钟就能出锅
- 出场3分钟送助攻!郑智接班人踢疯了,保利尼奥附体效率完胜何超
