使用array_diff优雅的删除数组中指定的value值
在开发过程中经常需要删除数组中某个值;
比如说有个数组;
$names = [ '张三', '李四', '王麻子']
PHP
我们希望删除 李四
这个值;
常规的思路是先用 array_search
函数获取 李四
在 $names
中的键名;
然后使用 unset
删除;
为了严谨还得判断李四
是否存在;
$key = array_search('李四', $names);if ($key !== false) { unset($names[$key]);}
PHP
这里有个坑是为了避免要删除的值在数组第0个位置的时候;
此处不能使用 if($key)
来判断;
而是应该使用if ($key !== false)
;
另外unset
不会重新格式化数组的key ;
操作完后会是这个样子的;
这个0和2少了1很是难受;
上面这两种操作中我们还可以用 array_splice
替代 unset
;
if ($key !== false) { array_splice($names, $key, 1);}
PHP
而且一旦数组中有多个李四
;
$names = [ '张三', '李四', '王麻子', '李四'];
PHP
那上面这种方式还只能删除第一个李四
;
如果要删除全部的李四就需要循环了;
foreach ($names as $k => $v) { if ($v === '李四') { unset($names[$k]); }}
PHP
除了上面这些常规操作;
还有一个骚操作是利用 array_flip
两次反转数组;
$names = [ '张三', '李四', '王麻子', '李四',];$names = array_flip($names);unset($names['李四']);$names = array_flip($names);
PHP
罢特如果王麻子
也有两个的话;
因为键名不能重复的原因;
这种操作后只会保留1个王麻子;
因此这种方式不够完美;
文章磨磨唧唧终于算是讲到了最后;
拿出了标题中的array_diff
;array_diff
本来是用来计算数组的差集;
8过根据我们小学学过的知识扩展下;
这个求差集可以用来删除数组指定的值;
如果忘了差集的概念;
现在可以翻开小学数学课本三年级上册《集合》复习下了;
$names = [ '张三', '李四', '王麻子', '李四',];$names = array_diff($names, ['李四']);
PHP
array_diff
跟 unset
一样并不会格式化键名;
如果需要格式化键名;
就再加个 array_value
;
$names = [ '张三', '李四', '王麻子', '李四',];$names = array_values(array_diff($names, ['李四']));
本文由 帝一博客 原创发布。用户在本站发布的原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。独家文章转载,请联系邮箱:17762131@qq.com。获得授权后,须注明本文地址: https://d1blog.com/phpjiqiao/102.html
-
PHP 扫描微信公众号二维码,关注并自动登录网站
2020-10-27 16:35
-
fastadmin git 安装过程记录笔记
2020-10-03 17:34
-
PHP 多个redis key 删除遇到Function R...
2020-08-19 16:01
-
PHP-Redis,keys()对键名进行模糊查询
2020-08-19 15:34
-
php连接redis
2019-12-16 10:00
-
linux mshowfat命令显示MS-DOS文件在FAT...
2019-09-05 08:02
-
PHP中重定向网页跳转页面的方法
2019-07-09 11:38
-
CI框架中使用join实现多表联合查询
2019-06-13 20:56
-
Laravel 5.3 学习笔记之错误日志
2019-06-13 20:56
-
PHP批量生成静态HTML的简单原理和方法
2019-06-13 20:55
网友留言评论