首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP数组按值删除(不是键)

PHP数组按值删除(不是键)
EN

Stack Overflow用户
提问于 2011-08-29 00:44:04
回答 19查看 1.2M关注 0票数 1.1K

我有一个PHP数组如下:

代码语言:javascript
运行
复制
$messages = [312, 401, 1599, 3, ...];

我想删除包含值$del_val (例如,$del_val=401)的元素,但是我不知道它的键。这可能会有所帮助:每个值只能存在一次

我在找最简单的函数来完成这个任务。

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2011-08-29 00:53:27

使用array_search()unset,尝试以下操作:

代码语言:javascript
运行
复制
if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search()返回它找到的元素的键,该键可用于使用unset()从原始数组中删除该元素。它将在失败时返回FALSE,但是它可以在成功时返回一个false-y值(例如,您的键可能是0 ),这就是为什么使用严格比较!==运算符的原因。

if()语句将检查array_search()是否返回一个值,并且只执行一个操作。

票数 1.9K
EN

Stack Overflow用户

发布于 2012-05-04 19:41:19

从数组中删除元素基本上就是用一个元素设置差异

代码语言:javascript
运行
复制
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

它很好地概括了,如果您愿意的话,您可以同时删除任意多个元素。

免责声明:请注意,我的解决方案会生成数组的新副本,同时保持旧的数组保持原样,而接受的答案则会发生变异。选一个你需要的。

票数 866
EN

Stack Overflow用户

发布于 2012-08-16 07:36:12

一个有趣的方法是使用array_keys()

代码语言:javascript
运行
复制
foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

array_keys()函数需要两个额外的参数来返回特定值的键,以及是否需要严格检查(即使用===进行比较)。

这还可以删除具有相同值的多个数组项(例如,[1, 2, 3, 3, 4])。

票数 164
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7225070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档