使用array_diff优雅的删除数组中指定的value值
2019-07-24 08:58:19来源:编程学习网 阅读 ()
在开发过程中经常需要删除数组中某个值;
比如说有个数组;
$names = [ '张三', '李四', '王麻子' ]
我们希望删除 李四 这个值;
常规的思路是先用 array_search 函数获取 李四 在
$key = array_search('李四', $names); if ($key !== false) { unset($names[$key]); }
这里有个坑是为了避免要删除的值在数组第0个位置的时候;
此处不能使用 if(names中的键名;然后使用unset删除;为了严谨还得判断李四是否存在;¨G1G这里有个坑是为了避免要删除的值在数组第0个位置的时候;此处不能使用if(key) 来判断;
而是应该使用if ($key !== false) ;
另外unset 不会重新格式化数组的key ;
操作完后会是这个样子的;
这个0和2少了1很是难受;
上面这两种操作中我们还可以用 array_splice 替代 unset;
if ($key !== false) { array_splice($names, $key, 1); }
而且一旦数组中有多个李四;
$names = [ '张三', '李四', '王麻子', '李四' ];
那上面这种方式还只能删除第一个李四;
如果要删除全部的李四就需要循环了;
foreach ($names as $k => $v) { if ($v === '李四') { unset($names[$k]); } }
除了上面这些常规操作;
还有一个骚操作是利用 array_flip 两次反转数组;
$names = [ '张三', '李四', '王麻子', '李四', ]; $names = array_flip($names); unset($names['李四']); $names = array_flip($names);
罢特如果王麻子也有两个的话;
因为键名不能重复的原因;
这种操作后只会保留1个王麻子;
因此这种方式不够完美;
文章磨磨唧唧终于算是讲到了最后;
拿出了标题中的array_diff;
array_diff 本来是用来计算数组的差集;
8过根据我们小学学过的知识扩展下;
这个求差集可以用来删除数组指定的值;
如果忘了差集的概念;
现在可以翻开小学数学课本三年级上册《集合》复习下了;
$names = [ '张三', '李四', '王麻子', '李四', ]; $names = array_diff($names, ['李四']);
array_diff 跟 unset 一样并不会格式化键名;
如果需要格式化键名;
就再加个 array_value;
$names = [ '张三', '李四', '王麻子', '李四', ]; $names = array_values(array_diff($names, ['李四']));
原文链接:http://www.phpxs.com/post/6330/
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:MySQL数据库表设计规范
- PHP访问MySQL查询超时怎么办 2020-03-09
- MySQL中使用WHERE子句的方法 2019-10-25
- 关于laravel后台模板laravel-admin select框的使用详解 2019-10-08
- PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql 2019-09-23
- 使用 Shell 在多服务器上批量操作 2019-09-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash