php удалить пустой массив
Как удалить пустые значения из многомерного массива в PHP?
Я искал много ответов, но ни один из них не работает для меня.
Я ищу способ, чтобы удалить подмассивы с пустыми значениями, как [12] [1] и [2] сохраняя все остальное.
Я пробовал много функций в официальных документах php, и ни одна из них не работала.
я использовал этот один:
но он удаляет только элемент в подзонах; мне нужно, чтобы подзоны были полностью удалены.
8 ответов
немного поздно, но может помочь кому-то, кто ищет тот же ответ. Я использовал этот очень простой подход к работе;
следующая функция работала для моего случая. Мы можем использовать простую рекурсивную функцию для удаления всех пустых элементов из многомерного массива PHP:
Затем нам просто нужно вызвать эту функцию:
Не уверен, что это именно то, что ищете.
Я уверен, что лучше проверить и сделать это более надежным может помочь решению.
поскольку подзоны в вашем массиве имеют только один элемент каждый, вы можете упростить подход, используя любой из двух следующих методов. Логическое преимущество заключается в том, чтобы избежать функционального итератора ( array_filter ) на втором уровне элементов. Вот почему current() больше подходит для этого вопроса/страница.
как выходной один и тот же результат (который намеренно удаляет пустые значения и варенье 0 значение)
если массив 2-го уровня OP содержал более одного элемента, и OP хотел удалить все нуль-иш, false-y, пустые, нулевые элементы (то есть нули не нужны или гарантированно не происходят), то Alastair f’s answer было бы лучшим выбором.
моя точка зрения (и моя мотивация за тратить так много времени и заботы, чтобы ответить на этот вопрос), что array_filter() является жадным, и если вы не знаете об этом поведении по умолчанию, ваш проект может молча выводить неправильную информацию. Надеюсь, это объяснение сэкономит программистам время и силы.
Как удалить пустые элементы в массиве вместе с ключами?
unset удаляет только значение, а я хочу удалить еще и ключи. Что использовать для этого? Также хотелось бы узнать функцию, которая удалит все это дело полностью сама, без циклов, думаю, что такая есть, не так ли?
6 ответов 6
Зашел посмотреть на решение достаточно насущной проблемы. Беглым взглядом окинул топик и увидел, что нормального решения пока нет. Сочинил следующее:
Не изящно, но очень просто и, главное, работает 🙂
В зависимости от того, что считается «пустым» элементом, можно еще такой вариант предложить:
Хотелось бы отметить что далеко не всегда такого кода достаточно:
Например так мы например можем нарваться на неприятности:
На выходе мы получим
Хотя на самом то деле хотели получить
По этому для таких случаев используем:
И все, ключей пустых нет.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками массивы php или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.17.40238
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
массивы — PHP Удаление пустых элементов из объекта
У меня есть следующий объект, здесь напечатан в виде массива. Этот объект построен из запроса SOAP.
Что я хочу сделать, это удалить все пустые элементы и быть возвращенным с этим объектом
редактировать
Объект AdminInfo как JSON:
Решение
Требования: рекурсивно сканировать вложенные массивы, удаляя пустые ветви / элементы.
Это еще одна «прогулка по дереву».
Единственная «хитрая» часть — позволить обработке выше по дереву узнать, добавлять ли текущий элемент в выходное дерево или нет.
Функция, которая обрабатывает узел, вернет массив, который имеет флаг «сохранить значение», а также значение, которое нужно сохранить.
Другие решения
После небольшого скручивания головы я придумал рекурсивную функцию, которая, как я предлагал ранее, преобразует объект в массив, чтобы проверить, установлены ли переменные в нуль.
Если все переменные внутри этого объекта равны нулю, родительский объект индексируется, чтобы установить ссылку на объект равной нулю.
Я пытался объяснить и документировать код как можно лучше.
Пожалуйста, не просто скопируйте код и покончите с ним, а прочитайте его и попробуйте изучить код, который я предоставил.
Рекурсивная функция будет довольно сложной, поскольку вы не просто хотите удалить нулевые переменные, но удалите все, что содержит только нулевые переменные.
Вот пример без рекурсии, которая просто удаляет null переменные из object :
Удалить пустые элементы массива
Некоторые элементы в моем массиве – это пустые строки, основанные на том, что пользователь отправил. Мне нужно удалить эти элементы. У меня есть это:
Вы можете использовать array_filter для удаления пустых элементов:
Если у вас есть (int) 0 в вашем массиве, вы можете использовать следующее:
EDIT: Возможно, ваши элементы не пустые как таковые, но содержат одно или несколько пробелов … Вы можете использовать следующее, прежде чем использовать array_filter
«Если обратный вызов не будет передан, все записи ввода, равные FALSE, будут удалены». – http://php.net/manual/en/function.array-filter.php
Самый популярный ответ на эту тему абсолютно НЕПРАВИЛЬНЫЙ.
Рассмотрим следующий скрипт PHP:
Почему это? Поскольку строка, содержащая один символ «0», также вычисляет значение boolean false, поэтому, хотя это не пустая строка, она все равно будет фильтроваться. Это было бы ошибкой.
Передача встроенной функции strlen, поскольку функция фильтрации будет работать, потому что она возвращает ненулевое целое для непустой строки и нулевое целое для пустой строки. Целочисленные числа без нуля всегда оцениваются как истинные при преобразовании в логические, тогда как нулевые целые числа всегда вычисляются как false при преобразовании в boolean.
Итак, абсолютный, окончательный, правильный ответ:
Вы можете просто сделать
array_filter: «Если обратный вызов не предоставляется, все записи ввода, равные FALSE, будут удалены». Это означает, что элементы со значениями NULL, 0, ‘0’, », FALSE, array () также будут удалены.
который удалит элементы со значениями NULL, » и FALSE.
Надеюсь это поможет 🙂
ОБНОВИТЬ
Еще один лайнер для удаления пустых («пустых строк») элементов из вашего массива.
Примечание. Этот код намеренно содержит нулевые, 0 и ложные элементы.
Или, возможно, вы хотите сначала обрезать элементы массива:
Примечание. Этот код также удаляет нулевые и ложные элементы.
Самый проголосовавший ответ ошибочен или, по крайней мере, не совсем прав, поскольку OP говорит только о пустых строках. Вот подробное объяснение:
Прежде всего, мы должны договориться о том, какие пустые средства. Вы хотите отфильтровать:
Как вы отфильтровываете значения
Чтобы отфильтровать только пустые строки :
Чтобы только отфильтровать строго ложные значения, вы должны использовать функцию обратного вызова :
Обратный вызов также полезен для любой комбинации, в которой вы хотите отфильтровать значения «falsey», кроме некоторых. (Например, фильтруйте все null и false и т. Д., Оставляя только 0 ):
Третий и четвертый случаи (для наших целей наконец) эквивалентны, и для этого все, что вам нужно использовать, – это значение по умолчанию:
Я использую следующий скрипт для удаления пустых элементов из массива
Если вы работаете с числовым массивом и вам нужно повторно проиндексировать массив после удаления пустых элементов, используйте функцию array_values :
См. Также: PHP reindex array?
Я должен был сделать это, чтобы сохранить значение массива (string) 0
Для многомерного массива
Просто хочу внести альтернативу циклам … также устраняя пробелы в ключах …
В моем случае я хотел сохранить последовательные ключи массива, когда операция была завершена (а не просто нечетные числа, на что я смотрел. Настройка кода для просмотра только для нечетных ключей показалась мне хрупкой, а не будущей).
Комбинация array_filter и array_slice делает трюк.
Не знаю об эффективности или контрольных показателях, но это работает.
используйте функцию array_filter для удаления пустых значений:
Только одна строка: Обновление (спасибо @suther):
вывод
Удалить пустые элементы массива
попробуйте это ** ** Пример
Вкратце:
Это мой предложенный код:
Объяснение:
Удаление пустых элементов массива
некоторые элементы в мой массив являются пустыми строками на основе того, что пользователь представил. Мне нужно удалить эти элементы. У меня есть это:
25 ответов:
можно использовать array_filter удалить пустые элементы:
если у вас (int) 0 в вашем массиве, вы можете использовать следующее:
EDIT: возможно, ваши элементы не пусты сами по себе, но содержат один или несколько пробелов. Вы можете использовать следующее Перед использованием array_filter
самый популярный ответ на эту тему абсолютно неверен.
рассмотрим следующий PHP-скрипт:
почему это? Поскольку строка, содержащая один символ ‘0’, также вычисляется как логическое значение false, поэтому, даже если это не пустая строка, она все равно будет отфильтрована. Это было бы ошибкой.
передача встроенной функции strlen в качестве функции фильтрации будет работать, поскольку она возвращает ненулевое целое число для непустой строки, и нулевое целое число для пустой строки. Ненулевых целых чисел всегда возвращать true при преобразовании в boolean, А нуль целых возвращают false при преобразовании в boolean.
Итак, абсолютный, окончательный, правильный ответ:
array_filter: «если обратный вызов не предоставляется, все записи ввода, равные FALSE, будут удалены.»Это означает, что элементы со значениями NULL, 0, ‘0’,», FALSE, array() также будут удалены.
другой вариант делает
который удалит элементы со значениями NULL, » и FALSE.
надеюсь, что это помогает 🙂
обновление
еще один лайнер для удаления пустых («»пустая строка) элементов из массива.
Примечание: этот код намеренно сохраняет нулевые, 0 и ложные элементы.
или, может быть, вы хотите сначала обрезать элементы массива:
Примечание: этот код также удаляет null и false элементы.
Если вы работаете с числовым массивом и необходимо повторно индексировать массив после удаления пустых элементов, используйте array_values функция:
самый проголосовавший ответ неправильно или, по крайней мере, не совсем верно, поскольку OP говорит только о пустых строках. Вот подробное объяснение:
Что значит пустой в смысле?
прежде всего, мы должны договориться о том, что пустой средства. Вы хотите отфильтровать: