首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP从关联数组中删除元素

PHP从关联数组中删除元素
EN

Stack Overflow用户
提问于 2011-03-27 23:17:20
回答 9查看 413.6K关注 0票数 102

我有一个PHP数组,如下所示:

代码语言:javascript
复制
Index              Key     Value
[0]                1       Awaiting for Confirmation
[1]                2       Assigned
[2]                3       In Progress
[3]                4       Completed
[4]                5       Mark As Spam

当我对数组值执行var_dump操作时,得到的结果如下:

代码语言:javascript
复制
array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }

我想删除垃圾邮件完成和标记为垃圾邮件。我知道我可以unset[$array[3],$array[4]),但问题是有时索引号可能会不同。

有没有一种方法可以通过匹配值名而不是键值来删除它们?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-03-27 23:19:49

您的数组非常奇怪:为什么不直接使用key value 作为索引,使用作为索引...值?

如果你的数组是这样声明的,不是更容易吗:

代码语言:javascript
复制
$array = array(
    1 => 'Awaiting for Confirmation', 
    2 => 'Asssigned', 
    3 => 'In Progress', 
    4 => 'Completed', 
    5 => 'Mark As Spam', 
);

这将允许您使用key的值作为索引来访问数组……

您还可以使用函数来搜索值,例如:

代码语言:javascript
复制
$indexCompleted = array_search('Completed', $array);
unset($array[$indexCompleted]);

$indexSpam = array_search('Mark As Spam', $array);
unset($array[$indexSpam]);

var_dump($array);

比你的数组更简单,不是吗?

取而代之的是,你的数组看起来像这样:

代码语言:javascript
复制
$array = array(
    array('key' => 1, 'value' => 'Awaiting for Confirmation'), 
    array('key' => 2, 'value' => 'Asssigned'), 
    array('key' => 3, 'value' => 'In Progress'), 
    array('key' => 4, 'value' => 'Completed'), 
    array('key' => 5, 'value' => 'Mark As Spam'), 
);

您必须遍历所有项目,分析value,并取消设置正确的项目:

代码语言:javascript
复制
foreach ($array as $index => $data) {
    if ($data['value'] == 'Completed' || $data['value'] == 'Mark As Spam') {
        unset($array[$index]);
    }
}
var_dump($array);

即使可行,也不是那么简单...我坚持认为:您不能更改数组的格式,以使用更简单的键/值系统吗?

票数 158
EN

Stack Overflow用户

发布于 2012-06-23 09:10:47

代码语言:javascript
复制
  ...

  $array = array(
      1 => 'Awaiting for Confirmation', 
      2 => 'Asssigned', 
      3 => 'In Progress', 
      4 => 'Completed', 
      5 => 'Mark As Spam', 
  );



  return array_values($array);
  ...
票数 96
EN

Stack Overflow用户

发布于 2011-03-27 23:19:41

代码语言:javascript
复制
$key = array_search("Mark As Spam", $array);
unset($array[$key]);

对于二维数组...

代码语言:javascript
复制
$remove = array("Mark As Spam", "Completed");
foreach($arrays as $array){
    foreach($array as $key => $value){
        if(in_array($value, $remove)) unset($array[$key]);
    }
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5450148

复制
相关文章

相似问题

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