2015-06-15 3 views
-1

Я ищу наиболее удобный для работы подход, чтобы проверить, являются ли все значения в массиве нулевыми или если он имеет хотя бы один элемент с другими типами.Определите, все ли значения в массиве PHP равны нулю

т.е. я нужен метод, называемый containsOnlyNull ($ массив), который возвращает булевы согласно переданного массива

например, :

$a = containsOnlyNull([null,null,null,null,null]); 
$b = containsOnlyNull([null,null,1,null,null]); 

// $a will be true 
// $b will be false 

Любые советы будут оценены :)

+3

Вы пробовали что-нибудь? – Rizier123

+1

array_reduce или array_walk_recursive, если многомерный массив – splash58

+0

то, что я пробовал, очень похоже на то, что я принял как лучший ответ, как упоминалось в вопросе, который я искал (потенциально), более подходящего элемента управления. Private function containsOnlyNull ($ array) { $ filterArray = array_filter ( $ array, function ($ value) { return! is_null ($ value); } ); return count ($ filterArray) === 0; } ' – Ali

ответ

6
function containsOnlyNull($input) 
{ 
    return empty(array_filter($input, function ($a) { return $a !== null;})); 
} 
+0

Это может также содержать пустые строки, false или 0, ... – Rizier123

+0

Спасибо @Mantas, видя, что у нас есть 3 похожих предложения. плохо возьмите это, это лучший подход (по крайней мере, на данный момент) :) – Ali

2

Вы можете просто использовать array_filter функцию PHP, как

function containsOnlyNull($args){ 
    return count(array_filter($args,function($v){return $v !== null;})) === 0; 
} 

$a = containsOnlyNull([null,null,null,null,null]); 
$b = containsOnlyNull([null,null,1,null,null]); 

echo $a."<br>"; 
echo $b; 

Fiddle

+0

null a 0 не то же самое. Но голосующий голос не мой ^) – splash58

+0

Я думаю, что не нужно «callback» слишком @ splash58 –

+0

И больше return (count ($ result) === 0? – splash58

2

Мне нравится использовать array_reduce. Этот метод подсчитывает ненулевые элементы, а если больше 0, возвращается false. В противном случае он возвращает true.

function containsOnlyNull($arr) { 
    return array_reduce($arr, function($carry, $item) { 
     return $carry += (is_null($item) ? 0 : 1); 
    }, 0) > 0 ? false : true; 
} 

Демо:IDEOne

+0

Еще один хороший пример, оцененный – Ali

Смежные вопросы