如何用PHP从关联数组中删除键?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个PHP数组,看起来像这样:

Index              Key        Value
[0]                1       Awaiting for Confirmation
[1]                2       Asssigned
[2]                3       In Progress
[3]                4       Completed
[4]                5       Mark As Spam

当我var_dump数组值我得到这个:

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) "Asssigned" } [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" } } 

我想删除“已完成”和“标记为垃圾邮件”我知道我可以取消设置[$ array [3],$ array [4])将执行此操作。但问题是,有时索引号可能会有所不同,因此是否有办法通过匹配值名称来删除“已完成”和“标记为垃圾邮件”?

提问于
用户回答回答于

你的数组很奇怪:为什么不使用keyas索引和valueas ...的值呢?

如果你的数组被声明为这样会不会容易得多:

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

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

你可以使用函数来搜索值,例如as array_search()

$indexCompleted = array_search('Completed', $array);
unset($array[$indexCompleted]);

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

var_dump($array);

比你的阵列更容易,不是吗?

相反,你的数组看起来像这样:

$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并取消设置正确的项目:

foreach ($array as $index => $data) {
    if ($data['value'] == 'Completed' || $data['value'] == 'Mark As Spam') {
        unset($array[$index]);
    }
}
var_dump($array);

即使可以,也不是那么简单......我坚持认为:你能不能改变阵列的格式,使用简单的键/值系统?

用户回答回答于
  ...

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



  return array_values($array);
  ...

扫码关注云+社区