Я хочу удалить значения NULL
, FALSE
и ''
.
Я использовал array_filter
но он также удаляет 0
.
Есть ли функция, чтобы делать то, что я хочу?
array(NULL,FALSE,'',0,1) -> array(0,1)
array_filter
должен работать нормально, если вы используете identical
оператор сравнения .
вот пример
$values = [NULL, FALSE, '', 0, 1]; function myFilter($var){ return ($var !== NULL && $var !== FALSE && $var !== ''); } $res = array_filter($values, 'myFilter');
Или, если вы не хотите определять функцию фильтрации, вы также можете использовать анонимную функцию (закрытие):
$res = array_filter($values, function($value) { return ($value !== null && $value !== false && $value !== ''); });
Если вам просто нужны числовые значения, вы можете использовать is_numeric как ваш обратный вызов: пример
$res = array_filter($values, 'is_numeric');
С http://php.net/manual/en/function.array-filter.php#111091 :
Если вы хотите удалить NULL, FALSE и Empty Strings, но оставить значения 0, вы можете использовать strlen в качестве функции обратного вызова:
array_filter($array, 'strlen');
array_filter
не работает, потому что по умолчанию он удаляет все, что эквивалентно FALSE
, и PHP считает, что значение 0
равно false. В руководстве по PHP есть что сказать по этому вопросу:
При преобразовании в boolean следующие значения считаются FALSE:
- сама логическая ЛОЖЬ
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка и строка «0»,
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип NULL (включая неустановленные переменные)
- Объекты SimpleXML, созданные из пустых тегов
Каждое другое значение считается TRUE (включая любой ресурс).
Вы можете передать второй параметр array_filter
с обратным вызовом к функции, которую вы пишете самостоятельно, которая сообщает array_filter
, array_filter
или нет элемент.
Предполагая, что вы хотите удалить все эквивалентные значения FALSE, кроме нулей, это простая функция для записи:
function RemoveFalseButNotZero($value) { return ($value || is_numeric($value)); }
Затем вы просто перезаписываете исходный массив фильтрованным массивом:
$array = array_filter($array, "RemoveFalseButNotZero");
Используйте функцию обратного вызова с помощью array_filter. См. Этот пример, снятый с руководства PHP, о том, как использовать функции обратного вызова. Функция обратного вызова в примере фильтруется на основе нечетного / четного; вы можете написать небольшую функцию для фильтрации на основе ваших требований.
<?php function odd($var) { // returns whether the input integer is odd return($var & 1); } function even($var) { // returns whether the input integer is even return(!($var & 1)); } $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array(6, 7, 8, 9, 10, 11, 12); echo "Odd :\n"; print_r(array_filter($array1, "odd")); echo "Even:\n"; print_r(array_filter($array2, "even")); ?>
Однострочники всегда хороши.
$clean_array = array_diff(array_map('trim', $my_array), array('', NULL, FALSE));
Объяснение:
array_diff
: обрезанная версия $my_array
. Используя array_map
, окружающие пробелы обрезаются из каждого элемента через функцию trim
. Хорошо использовать обрезанную версию в том случае, если элемент содержит строку, которая представляет собой ничего, кроме пробелов (т.е. табуляции, пробелы), которые, как я предполагаю, также будут удалены. Вы можете так же легко использовать $ my_array для 1-го параметра, если вы не хотите обрезать элементы. array_diff
: массив элементов, которые вы хотите удалить из $my_array
. ''
, NULL
и FALSE
находятся во втором массиве, они никогда не могут быть возвращены array_diff
. РЕДАКТИРОВАТЬ:
Оказывается, вам не нужно иметь NULL
и FALSE
во втором массиве. Вместо этого вы можете просто ''
, и он будет работать одинаково:
$clean_array = array_diff(array_map('trim', $my_array), array(''));
function my_filter($var) { // returns values that are neither false nor null (but can be 0) return ($var !== false && $var !== null && $var !== ''); } $entry = array( 0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => '', 5 => 0 ); print_r(array_filter($entry, 'my_filter'));
Выходы:
Array ( [0] => foo [2] => -1 [5] => 0 )
проверьте, меньше ли 1 и больше -1, если затем не удалите его …
$arrayValue = (NULL,FALSE,'',0,1); $newArray = array(); foreach($arrayValue as $value) { if(is_int($value) || ($value>-1 && $value <1)) { $newArray[] = $value; } } print_r($newArray);
function ExtArray($linksArray){ foreach ($linksArray as $key => $link) { if ($linksArray[$key] == '' || $linksArray[$key] == NULL || $linksArray[$key] == FALSE || $linksArray[$key] == '') { unset($linksArray[$key]); }else { return $linksArray[$key]; } } }
сfunction ExtArray($linksArray){ foreach ($linksArray as $key => $link) { if ($linksArray[$key] == '' || $linksArray[$key] == NULL || $linksArray[$key] == FALSE || $linksArray[$key] == '') { unset($linksArray[$key]); }else { return $linksArray[$key]; } } }
Эта функция может помочь вам
array_filter – это функция, которая решит вашу проблему …
Для получения дополнительной информации см. Эту ссылку–> http://php.net/manual/en/function.array-filter.php