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]) будет делать трюк. Но проблема в том, что когда-нибудь номер индекса может быть другим, поэтому есть ли способ удалить «завершенный» и «Mark As Spam», сопоставив имя значения?

Большое спасибо заранее

Ваш массив довольно странный: почему бы просто не использовать key как индекс, а value как … значение?

Было бы намного проще, если бы ваш массив был объявлен следующим образом:

 $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); с $indexCompleted = array_search('Completed', $array); unset($array[$indexCompleted]); $indexSpam = array_search('Mark As Spam', $array); unset($array[$indexSpam]); var_dump($array); с $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); с foreach ($array as $index => $data) { if ($data['value'] == 'Completed' || $data['value'] == 'Mark As Spam') { unset($array[$index]); } } var_dump($array); 

Даже если делать, это не так просто … и я настаиваю: не можете ли вы изменить формат своего массива, работать с более простой системой key / value?

  ... $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]); 

Для 2D-массивов …

 $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"); 

/ edit Как упоминалось 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); 

Просто отметьте, что ваш массив будет переиндексирован.

Способ сделать это, чтобы взять ваш вложенный целевой массив и скопировать его в один шаг на не-вложенный массив. Удалите ключ (ов), а затем назначьте окончательный обрезанный массив вложенному узлу более раннего массива. Вот код, чтобы сделать его простым:

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

для одиночного массива Возврат к использованию reset($item)

Вы можете использовать это

 unset($dataArray['key']);