使用array_diff优雅的删除数组中指定的value值

简介: 使用array_diff优雅的删除数组中指定的value值

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

比如说有个数组;

$names = [
    '张三',
    '李四',
    '王麻子'
]

PHP

Copy

我们希望删除 李四 这个值;

常规的思路是先用 array_search 函数获取 李四$names 中的键名;

然后使用 unset 删除;

为了严谨还得判断李四是否存在;

$key = array_search('李四', $names);
if ($key !== false) {
    unset($names[$key]);
}

PHP

Copy

这里有个坑是为了避免要删除的值在数组第0个位置的时候;

此处不能使用 if($key) 来判断;

而是应该使用if ($key !== false) ;

另外unset 不会重新格式化数组的key ;

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



这个0和2少了1很是难受;

上面这两种操作中我们还可以用 array_splice 替代 unset

if ($key !== false) {
    array_splice($names, $key, 1);
}

PHP

Copy

而且一旦数组中有多个李四

$names = [
    '张三',
    '李四',
    '王麻子',
    '李四'
];

PHP

Copy

那上面这种方式还只能删除第一个李四;

如果要删除全部的李四就需要循环了;

foreach ($names as $k => $v) {
    if ($v === '李四') {
        unset($names[$k]);
    }
}

PHP

Copy

除了上面这些常规操作;

还有一个骚操作是利用 array_flip 两次反转数组;

$names = [
    '张三',
    '李四',
    '王麻子',
    '李四',
];
$names = array_flip($names);
unset($names['李四']);
$names = array_flip($names);

PHP

Copy

罢特如果王麻子也有两个的话;

因为键名不能重复的原因;

这种操作后只会保留1个王麻子;

因此这种方式不够完美;

文章磨磨唧唧终于算是讲到了最后;

拿出了标题中的array_diff

array_diff 本来是用来计算数组的差集;

8过根据我们小学学过的知识扩展下;

这个求差集可以用来删除数组指定的值;

如果忘了差集的概念;

现在可以翻开小学数学课本三年级上册《集合》复习下了;

$names = [
    '张三',
    '李四',
    '王麻子',
    '李四',
];
$names = array_diff($names, ['李四']);

PHP

Copy

array_diffunset 一样并不会格式化键名;

如果需要格式化键名;

就再加个 array_value

$names = [
    '张三',
    '李四',
    '王麻子',
    '李四',
];
$names = array_values(array_diff($names, ['李四']));
目录
相关文章
|
7月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
146 3
|
23天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
102 67
|
2月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
2月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
100 2
|
2月前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
35 3
|
2月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
|
3月前
|
Go
Golang语言之数组(array)快速入门篇
这篇文章是关于Go语言中数组的详细教程,包括数组的定义、遍历、注意事项、多维数组的使用以及相关练习题。
52 5
|
4月前
|
Python
PyCharm View as Array 查看数组
PyCharm View as Array 查看数组
123 1
|
5月前
|
索引
|
6月前
|
存储 安全 算法
C++的内置数组和STL array、STL vector
C++的内置数组和STL array、STL vector