PHP从关联数组中删除键

我有一个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])将做的伎俩。 但问题是,有时索引号可能会有所不同,因此是否有办法通过匹配值名称来删除“已完成”和“标记为垃圾邮件”?

非常感谢

你的数组很奇怪: 为什么不直接使用key作为索引,其value是…的值?

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

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

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

你可以使用函数来search数值,比如as array_search()

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

比你的arrays更容易,不是吗?


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

 $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); ... 
 $key = array_search("Mark As Spam", $array); unset($array[$key]); 

对于二维数组…

 $remove = array("Mark As Spam", "Completed"); foreach($arrays as $array){ foreach($array as $key => $value){ if(in_array($value, $remove)) unset($array[$key]); } } 

尝试这个:

 $keys = array_keys($array, "Completed"); 

/编辑如JohnP所述,此方法仅适用于非嵌套数组。

为什么不使用array_diff?

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

只要注意你的数组将被重新索引。

通过这种方法来获取嵌套的目标数组并将其单步复制到非嵌套数组中。 删除键(s),然后将最终修剪的数组分配给较早的数组的嵌套节点。 这是一个简单的代码:

 $temp_array = $list['resultset'][0]; unset($temp_array['badkey1']); unset($temp_array['badkey2']); $list['resultset'][0] = $temp_array; 

对于单个数组项目使用reset($item)

你可以使用这个

 unset($dataArray['key']);