Я хочу удалить значения NULL
, FALSE
и ''
.
Я использовал array_filter
, но он также удаляет 0
.
Есть ли функция, которая делает то, что я хочу?
array(NULL,FALSE,'',0,1) -> array(0,1)
Я хочу удалить значения 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
, удалить или удалить элемент.
Предполагая, что вы хотите удалить все эквивалентные значения 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
.EDIT:
Оказывается, вам не нужно иметь NULL
и FALSE
во втором массиве. Вместо этого вы можете просто ''
, и он будет работать одинаково:
$clean_array = array_diff(array_map('trim', $my_array), array(''));
проверьте, меньше ли 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 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
)
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