2010-12-12 11 views
42

Considerare:Come contare le voci non vuote in un array PHP?

[name] => Array ([1] => name#1 
        [2] => name#2 
        [3] => name#3 
        [4] => name#4 
        [5] => 
        [6] => 
        [7] => 
        [8] => 
        [9] => 
       ) 


$name = $_POST['name'] 

Voglio che il risultato sia 4.

count ($name) = 9 
count (isset($name)) = 1 
count (!empty($name)) = 1 

penserei che quest'ultimo sarebbe realizzare quello che serve, ma non è (le voci vuote sono da ingressi vuoti sul modulo).

risposta

84

È possibile utilizzare array_filter di tenere solo i valori che sono non vuoto nella matrice, in questo modo:

array_filter($array); 

Oppure, se la funzione di filtro è più complessa:

array_filter($array, function($x) { return !empty($x); }); 
# function(){} only works in in php >5.3, otherwise use create_function 

Quindi, per contare solo non vuoto:

count(array_filter($array)); 
19
count(array_filter($name)); 
+11

Si noti che questo non restituisce solo elementi vuoti, ma ogni elemento il cui valore è [uguale a 'false'] (http://php.net/manual/en/language.types.boolean.php#language.types. boolean.casting) (cioè '" "', 'null',' 0', 'false',' "0" '). – Gumbo

1

Ecco una semplice funzione di calcolo:

function non_empty(array $a) { 
    return array_sum(array_map(function($b) {return empty($b) ? 0 : 1;}, $a)); 
} 

Ciò manterrà indici di matrice se la funzione di gestione modulo ha bisogno di loro, come quando si sta associando il terzo ingresso sul nome per il terzo valore di un altro insieme di input, e là sono vuoti input tra di loro.

Problemi correlati