Дополнительно
Удаление элемента из массива в PHP
Есть ли простой способ удалить элемент из массива с помощью PHP, чтобы foreach ($array)
больше не включал этот элемент?
Я думал, что установка значения null
сделает это, но, видимо, это не работает.
2349
20
Существуют различные способы удаления элемента массива, причем некоторые из них более полезны для решения определенных задач, чем другие.
Удаление одного элемента массива
Если вы хотите удалить только один элемент массива, вы можете использовать
\unset()
или альтернативу\array_splice()
.Также, если у вас есть значение, но вы не знаете ключ для удаления элемента, вы можете использовать
\array_search()
, чтобы получить ключ.\unset()
методОбратите внимание, что при использовании
\unset()
ключи массива не будут изменяться/переиндексироваться. Если вы хотите переиндексировать ключи, вы можете использовать\array_values()
после\unset()
, который преобразует все ключи в числовые перечислимые ключи, начиная с 0.Код
Выход
\array_splice()
методПри использовании
\array_splice()
ключи будут автоматически переиндексированы, но ассоциативные ключи не изменятся, в отличие от\array_values()
, который преобразует все ключи в числовые.Также
\array_splice()
требует в качестве второго параметра смещение, а не ключ.Код
Выход
array_splice()
и\unset()
берут массив по ссылке, а это означает, что вы не хотите присваивать возвращаемые значения этих функций обратно в массив.Удаление нескольких элементов массива
Если вы хотите удалить несколько элементов массива и не хотите вызывать
\unset()
или\array_splice()
несколько раз, вы можете использовать функции\array_diff()
или\array_diff_key()
в зависимости от того, знаете ли вы значения или ключи элементов, которые хотите удалить.\array_diff()
методЕсли вам известны значения элементов массива, которые вы хотите удалить, то вы можете использовать
\array_diff()
. Как и в случае с\unset()
, это не изменит/переиндексирует ключи массива.Код
Выход
\array_diff_key()
методЕсли вам известны ключи элементов, которые вы хотите удалить, тогда вы хотите использовать
\array_diff_key()
. Здесь вы должны убедиться, что передаете ключи как ключи во втором параметре, а не как значения. В противном случае вам придется перевернуть массив с помощью\array_flip()
. А также здесь ключи не будут изменяться/переиндексироваться.Код
Выход
Также, если вы хотите использовать
\unset()
или\array_splice()
для удаления нескольких элементов с одинаковым значением, вы можете использовать\array_keys()
, чтобы получить все ключи для определенного значения и затем удалить все элементы.Следует отметить, что
unset()
сохранит индексы нетронутыми, чего вы'ожидаете при использовании строковых индексов (массив как хэштейбл), но может быть довольно неожиданным при работе с массивами с целочисленными индексами:Поэтому
array_splice()
можно использовать, если вы хотите нормализовать целочисленные ключи. Другим вариантом является использованиеarray_values()
послеunset()
:Это выход из кода выше:
Теперь, array_values() будет переиндексировать массив красиво, но это будет удалить все ключевые строки из массива и заменить их цифрами. Если вам нужно сохранить имена ключей (строк), или переиндексировать массив, если все ключи являются числовыми, использовать array_merge():
Выходы
Если у вас есть численно индексированный массив, в котором все значения уникальны (или они не уникальны, но вы хотите удалить все экземпляры определенного значения), вы можете просто использовать array_diff (), чтобы удалить соответствующий элемент, такой:
Например:
Это отображается следующая информация:
В этом примере элемент со значением 'Чарльз' будет удален, как может быть проверен оператором sizeof() вызовы, которые сообщают о размер 4 для исходного набора, и 3 после удаления.
Кроме того, для именованного элемента:
Уничтожить один элемент массива
сбросить()
На выходе будет:
Если вы должны повторно индексировать массив:
Тогда на выходе будет:
Поп-элемент с конца массива - возвращает значение удаленного элемента
смешанное array_pop(массив &$массив)
На выходе будет
Удалить первый элемент (красный) из массива, - возвратить значение удаляемого элемента
смешанное array_shift ( массив &$массив )
На выходе будет:
Выход:
Чтобы не делать поиск можно поиграть с array_diff`:
В этом случае никто не'т придется искать/использовать ключ.
Ассоциативные массивы
Для ассоциативных массивов, используйте
сбросить
:Числовых массивов
Для числовых массивов, используйте
array_splice
:Примечание
Используя
сбросить
для числовых массивов не будет выдавать ошибку, но это будет испортить ваши индексы:Если нужно удалить несколько значений в массив и элементы массива являются объекты или структурированных данных,
[array_filter][1]
это ваш лучший ставку. Те записи, которые возвращают true из функции обратного вызова будут сохранены.Если вам нужно удалить несколько элементов из ассоциативного массива, вы можете использовать array_diff_key() (здесь используется с array_flip()):
Выход:
сбросить()
удаляет перечисленные переменные.Поведение `и unset () внутри функции может варьироваться в зависимости от типа переменной, которую вы пытаетесь уничтожить.
Если глобализованном переменная
и unset () внутри функции, то будет удалена только локальная переменная. Переменная в вызывающей среде будет сохранять то же значение, как и раньше
сбросить () называлась.Ответ на приведенный выше код будет бар.
Чтобы
сбросить()
глобальной переменной внутри функции:Решения:
Дальнейшее объяснение:
Используя эти функции удаляет все ссылки на эти элементы из PHP. Если вы хотите сохранить ключ в массиве, но с пустым значением, присвоить пустую строку к элементу:
Кроме синтаксиса, там'с логическим разница между использованием и unset() и назначение '' к элементу. Первый говорит, что
это не'т больше не существует, в то время как второй говорит, что
это по-прежнему существует, но его значение является пустой строкой`.Если вы'ре дело с цифрами, назначая 0 может быть лучшей альтернативой. Так, если компания прекратила производство модели XL1000 звездочки, он будет обновлять его инвентаризацию с:
Однако, если он временно кончились XL1000 звездочки, но собиралась получить новый отгрузке с завода в конце этой недели, это лучше:
Если вы и unset() элемент, РНР изменяет массив так, что цикл до сих пор исправно работает. Это не't компактный массив, чтобы заполнить недостающие отверстия. Это то, что мы подразумеваем, когда говорим, что все массивы являются ассоциативными, даже когда они появляются, чтобы быть числовым. Здесь'ы пример:
В компактный массив, в плотно заполнены числовой массив, используйте array_values():
Кроме того, array_splice() автоматически переиндексирует массивы, чтобы не оставлять отверстий:
Это полезно, если вы're, используя массив в качестве очереди и хотите удалить элементы из очереди, при этом допуская произвольного доступа. Чтобы безопасно удалить первый или последний элемент из массива, используйте array_shift() и array_pop(), соответственно.
Я'd, просто хотел бы сказать у меня был конкретный объект, который имел атрибутов переменной (это было в основном отображение таблицы и я был изменение столбцов в таблице, так что атрибуты объекта, отражающий в таблице будет меняться так же):
Вся цель `$Филдса было просто, так что я Дон'т придется искать везде в коде, когда они'вэ изменилось, я просто смотрю в начале класса и изменить список атрибутов и *$ поля* массив контента, чтобы отразить новые атрибуты.
Предположим, у вас есть следующий массив:
Чтобы удалить "хранения", сделайте следующее:
И вы получите:
Выполните действия по умолчанию:
я)
второй)
III)в
IV)в
Создать массив в массив$переменная `` а потом когда я поставил 'элемент, который вы хотите удалить' вы положили что-то вроде: Я&; А". И если вы хотите удалить несколько элементов, тогда: "А", то "в”.