本篇内容介绍了“PHP数组函数的使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
取指定键名
对于某些关联数组,有时候我们只想取指定键名的那部分,比如数组为<代码> [& # 39;id # 39;=比;1,& # 39;名字# 39;=比;& # 39;zane # 39; & # 39;密码# 39;=比;& # 39;123456 & # 39;]代码>此时若只想取包含id和名称的部分该怎么实现呢?下面直接贴代码。
& lt; php ? raw 美元;=,(& # 39;id # 39;,=祝辞,1,& # 39;名字# 39;,=祝辞,& # 39;zane # 39;,, & # 39;密码# 39;,=祝辞,& # 39;123456 & # 39;];//,自己用,PHP 实现 function onlyKeys(原始美元,美元键),{ ,,,new 美元;=,[]; ,,,foreach (raw 美元;as key 美元;=祝辞,val美元),{ ,,,,,,,if (in_array($键,键)美元),{ ,,,,,,,,,,,新的美元(美元关键),=,val美元; ,,,,,,,} ,,,} ,,,, ,,,return 新美元; }//,用,PHP 内置函数实现 function newOnlyKeys(数组,美元,美元键),{ ,,,return array_intersect_key(数组,美元,array_flip(键)美元); } var_dump (onlyKeys(原始美元,,[& # 39;id # 39;,, & # 39;名字# 39;]));//,结果,[& # 39;id # 39;,=祝辞,1,& # 39;名字# 39;,=祝辞,& # 39;zane # 39;】 var_dump (newOnlyKeys(原始美元,,[& # 39;id # 39;,, & # 39;名字# 39;]));//,结果,[& # 39;id # 39;,=祝辞,1,& # 39;名字# 39;,=祝辞,& # 39;zane # 39;]
很明显简洁很多有木有!不过<代码> array_intersect_key 代码>和<代码> array_flip> 代码是什么鬼?这里简单的介绍一下这两个函数的作用,首先是<代码> array_flip 代码>函数,这个函数的功能是“将数组的键和值对调”,也就是键名变成值,值变成键名。我们传递的<代码> 代码>键美元参数经过这个函数便从<代码>[0=比;& # 39;id # 39; 1=比;& # 39;名字# 39;]> 代码转变为了<代码> [& # 39;id # 39;=比;0,& # 39;名字# 39;=比;1]> 代码。这样做的目的是为了向<代码> array_intersect_key 代码>函数服务,<代码> array_intersect_key 代码>函数的功能是“使用键名比较计算数组的交集”,也就是返回第一个参数数组中与其他参数数组相同键名的值。这样便实现了取指定键名的功能~(≧▽≦)/~啦!当然要详细了解这两个函数的功能还是要查PHP官方手册:array_fliparray_intersect_key
0 x02移除指定键名
有了上一个例子做铺垫,这个就简单讲讲啦,道理是大同小异滴。
& lt; PHP ? raw 美元;=,(& # 39;id # 39;,=祝辞,1,& # 39;名字# 39;,=祝辞,& # 39;zane # 39;,, & # 39;密码# 39;,=祝辞,& # 39;123456 & # 39;];//,用,PHP 内置函数实现 function removeKeys(数组,美元,美元键),{ ,,,return array_diff_key(数组,美元,array_flip(键)美元); }//,移除,id 键 var_dump (removeKeys(原始美元,,[& # 39;id # 39;,, & # 39;密码# 39;]));//,结果,[& # 39;名字# 39;,=祝辞,& # 39;zane # 39;]
和上一个例子相比本例只是将<代码> array_intersect_key 代码>函数改为<代码> array_diff_key> 代码,嗯……相信大家能猜出来这个函数的功能“使用键名比较计算数组的差集”,刚好和<代码> array_intersect_key> 代码的功能相反而已。官方手册:array_diff_key
0 x03数组去重
这个相信大家都有这个需求,当然PHP也内置了array_unique函数供给大家使用,如下例:
& lt; ? PHP $ input =,(& # 39;你是# 39;,=祝辞,666年,& # 39;小姐:我# 39;,=祝辞,233年,& # 39;他就是# 39;,=祝辞,233年,& # 39;she 如果# 39;,=祝辞,666]; $ result =, array_unique(输入); var_dump()美元的结果);//,结果,[& # 39;你是# 39;,=祝辞,666年,& # 39;小姐:我# 39;,=祝辞,233]
嘿,用这个函数就能解决大部分问题了,但是有时候你可能会觉得它不够快,原因如下:
<强> array_unique() 强>先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。
因为这个函数会先将数组进行排序,所以速度可能在某些场景达不到预期的要求。
现在我们可以祭出我们的黑科技<代码> array_flip 代码>函数,众所周知PHP里数组的键名是唯一的,所以在键名和值对调后重复的值便被忽略了。试想一下我们连续调用两次<代码> array_flip 代码>函数是不是就相当于实现了<代码> array_unique 代码>函数的功能呢?示例代码如下:
& lt; ? PHP $ input =,(& # 39;你是# 39;,=祝辞,666年,& # 39;小姐:我# 39;,=祝辞,233年,& # 39;他就是# 39;,=祝辞,233年,& # 39;she 如果# 39;,=祝辞,666]; $ result =, array_flip (array_flip(输入)美元); var_dump()美元的结果);//,结果,[& # 39;she 如果# 39;,=祝辞,666年,& # 39;他就是# 39;,=祝辞,233]PHP数组函数的使用