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)

  • Сопоставление массива PostgreSQL с Hibernate
  • Как создать и использовать multidimensional array в Scala?
  • Как может срез содержать?
  • Как упрощенная инструкция оператора работает для массивов и как получить iterator для массива?
  • Выберите случайный элемент из массива
  • Двумерный массив в Swift
  • Как разбить строку на пробел
  • Как передать ссылку на двумерный массив функции?
  • C # поиск ближайшего значения в массиве
  • Как получить среднюю, среднюю и другую статистику по всей матрице, массиву или файлу данных?
  • Преобразование массива символов C в строку
  • Interesting Posts

    Как объявить двухмерный массив типа string в Objective-C?

    Лучшая практика для принудительного сбора мусора в C #

    Как загрузить внешнюю веб-страницу внутри WebView

    Перекрестно проверять адреса электронной почты и удалять всю строку дубликатов?

    Один OnClickHandler для нескольких кнопок

    Явкие примитивные атомы по конструкции или случайно?

    «Android-обновление sdk» на безголовом Linux

    Создайте нулевой заполненный 2D-массив с единицами в позициях, индексированных вектором

    Неинициализированная константа ActiveSupport :: Зависимости :: Mutex (NameError)

    GCC и предварительно скомпилированные заголовки

    Custom Caret для WinForms TextBox

    Как объединить несколько условий для подмножества кадра данных с помощью «ИЛИ»?

    Опускание всех пространств имен xsi и xsd при сериализации объекта в .NET?

    Встраивать Java в приложение на C ++?

    Excel VBA Performance – 1 миллион строк – удаление строк, содержащих значение, менее чем за 1 минуту

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