Удаление пустых элементов из массива в php
В английской раскладке: elfktybt gecns[ 'ktvtynjd bp vfccbdf d php
В русской раскладке: удаление пустых элементов из массива в зрз
| Рубрика Программирование | Дата 14-04-2011
2 641 | Оцените статью
1
Есть несколько разных способов удаления пустых элементов массива.
Можно тупо перебрать исходный массив и копировать ненулевые элементы в другой массив. Можно удалять нулевые элементы. Можно вычесть из одного массива другой, как это делают с множествами. Но обо всем по порядку.
Начнем с самого простого и очевидного способа, копируем все непустые элементы в другой массив.
1 2 3 4 5 6 7 8 9 | function RemoveEmpty1($array) { $Result = array(); foreach ($array as $key => $value) { if ($value != '') $Result[] = $value; } return $Result; } |
Так как по моим замерам этот способ оказался самым быстрым отсчет скорости буду вести от него.
Второй способ. Удаляет элементы из массива в момент прохода по нему.
1 2 3 4 5 6 7 8 | function RemoveEmpty2($array) { foreach ($array as $key => $value) { if ($value == '') unset($array[$key]); } return $array; } |
Этот алгоритм работает в 1,12 раза медленнее предыдущего.
Третий способ. Оставляет элементы удовлетворяющие условию функции RemoveFilter, непустые элементы.
1 2 3 4 5 6 7 8 | function RemoveEmpty3($array) { function RemoveFilter($value) { return !empty($value); } return array_filter($array, "RemoveFilter"); } |
Тут мы имеем скорость работы в 2 раза медленнее чем в первом способе.
Следующая функция основана на исключении элементов одного массива из другого.
1 2 3 4 | function RemoveEmpty4($array) { return array_diff($array, array('')); } |
А это самый долгий способ он работает в 11 раз медленнее первого способа.
Рассмотрим работу функций на примере.
1 2 3 4 5 | Array ( [0] => [1] => [2] => 24951 [3] => [4] => [5] => 29156 [6] => [7] => [8] => 9805 [9] => ) // Исходный массив Array ( [0] => 24951 [1] => 29156 [2] => 9805 ) // После выполнения функции RemoveEmpty1 Array ( [2] => 24951 [5] => 29156 [8] => 9805 ) // После выполнения функции RemoveEmpty2 Array ( [2] => 24951 [5] => 29156 [8] => 9805 ) // После выполнения функции RemoveEmpty3 Array ( [2] => 24951 [5] => 29156 [8] => 9805 ) // После выполнения функции RemoveEmpty4 |
Как видите, первый способ в отличие от остальных не сохраняет ключи элементов, рассмотрим еще один пример.
1 2 3 4 5 | Array ( [Фрукт] => Апельсин [Овощь] => Баклажан [Одежда] => [Прическа] => [Птица] => Курица ) Array ( [0] => Апельсин [1] => Баклажан [2] => Курица ) Array ( [Фрукт] => Апельсин [Овощь] => Баклажан [Птица] => Курица ) Array ( [Фрукт] => Апельсин [Овощь] => Баклажан [Птица] => Курица ) Array ( [Фрукт] => Апельсин [Овощь] => Баклажан [Птица] => Курица ) |
Для ассоциативных массивов первый способ не подходит.
Присылайте свои способы, а также замеры скорости работы кода.


Спасибо!