PHP Удалить элементы из ассоциативного массива

У меня есть PHP-массив, который выглядит примерно так:

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 значения массива, я получаю следующее:

 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" } } 

Я хотел удалить Completed и Mark As Spam . Я знаю, что могу unset[$array[3],$array[4]) , но проблема в том, что иногда номер индекса может быть другим.

Есть ли способ удалить их, сопоставляя имя значения вместо значения ключа?

Ваш массив довольно странный: почему бы просто не использовать 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); 

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

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

 unset($dataArray['key']); 

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

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

  • Подсчитайте вхождения, которые имеет определенное целое число в массиве
  • Java-создание байтового массива, размер которого представлен длинным
  • Неизменяемый массив в Java
  • Есть ли максимальный предел длины массива в C ++?
  • Получите все неединственные значения (то есть: дублировать / более одного вхождения) в массиве
  • Как скопировать файл .txt в массив символов в c ++
  • Динамический двумерный массив с указателем на указатель
  • Передача многомерного массива переменной длины в функцию
  • Прочтите .txt-файл в 2D-массив
  • Простой вид пузыря c #
  • NullPointerException при создании массива объектов
  • Interesting Posts

    android-sdks / build-tools / 17.0.0 / aapt: ошибка при загрузке разделяемых библиотек: libz.so.1: невозможно открыть файл общих объектов: нет такого файла или каталога

    Как получить виртуальную машину VMware XP через соединение WIFI для хоста Windows 7?

    Скрипт Powershell из ярлыка для изменения рабочего стола

    Когда твердотельный диск выходит из строя, данные могут быть восстановлены?

    Что лучше всего переустанавливать Windows 7 при двойной загрузке с помощью ubuntu 11.04

    Рядом постоянное время вращается, что не нарушает стандарты

    Необходимо переустановить Windows XP Professional, но больше не имеете CD

    Каковы значения верхнего, левого, болотного или правого значения по умолчанию, когда используется позиция: абсолютная?

    WPF: Как сделать автоматическое изменение размера canvasа?

    В чем цель annotations @NamedArg в javaFX 8?

    Не удается подключиться к компьютеру Windows для совместного использования файлов

    Открытый распределенный вычислительный инструмент

    Как изменить цвет фона в приложении для Android

    Наследование backbone.js

    Какое программное обеспечение можно использовать для дешифрования хэша паролей Mac OS X?

    Давайте будем гением компьютера.