php 删除foreach的值_PHP:array_diff删除数组中指定的value值

本文介绍了在PHP中删除数组特定值的各种方法,包括使用unset、array_splice和array_diff。强调了在处理数组时需要注意的细节,如键名的保留和删除多个相同值的情况。还提到了array_diff在删除数组值时的巧妙应用,以及如何通过array_values重新格式化键名。
摘要由CSDN通过智能技术生成

在开发过程中经常需要删除数组中某个值;

比如说有个数组;

$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 ;

操作完后会是这个样子的;

9d6a3b8133eee69a621a472ac9ea5f05.png

这个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, ['李四']));
da421c37947f397b2dbb20121d85686a.png

举两个例子,怎么样写好代码

最经典的算法,献给正在面试道路上的你

如果你现在在面试PHP的道路上,看看面试基础题吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值