2012-07-25 20 views
26

Come posso contare il numero di elementi all'interno di un array con valore uguale a una costante? esempio,PHP: conteggiare valori di array specifici

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

come posso sapere direttamente il numero di "Ben" è dentro?

risposta

64
$array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 
$counts = array_count_values($array); 
echo $counts['Ben']; 
+0

grazie per aver risposto. :) –

+4

cosa succede se la matrice è multidimensionale? –

+3

@OkiErieRinaldi quindi OP deve aggiornare la domanda. – James

5

Utilizzare la funzione array_count_values(). Controllare questo link http://php.net/manual/en/function.array-count-values.php

+0

So che ma non dà quello che voglio, restituisce tutto il numero dello stesso elemento –

+0

@ ivory-santos sei sicuro che questo metodo non è utile ?? .. controlla questo link http://codepad.org/ Ye2x8uQD – swapnesh

+0

@ ivory-santos non è quello che vuoi esattamente? –

5

Utilizzare la funzione array_count_values.

$ countValues ​​= array_count_values ​​($ myArray);

echo $countValues["Ben"];

6

È possibile eseguire questa operazione con array_keys e conteggio.

$array = array("blue", "red", "green", "blue", "blue"); 
echo count(array_keys($array, "blue")); 

uscita:

3 
+0

Questa è la migliore risposta perché non dà fastidio a php per contare tutte le occorrenze di tutti i valori, restituisce semplicemente le chiavi di qualifica e le conteggia in un modo che non genererà mai un 'Avviso'. In altre parole,' echo count (array_keys ($ array, "purple")); 'stampa' 0' senza 'Notice' Questo è un approccio superiore/pulito rispetto a' array_count_values() '. +1 – mickmackusa

0

Se si desidera contare tutti gli stessi avvenimenti all'interno della matrice, ecco una funzione di contarli tutti, e restituire i risultati come un array multi-dimensionale:

function countSame($array) { 

$count = count($array); 
$storeArray = array(); 
while ($count > 0) { 
$count--; 

if ($array[$count]) { 
$a = $array[$count]; 
$counts = array_count_values($array); 
$counts = $counts[$a]; 
$tempArray = array($a, $counts); 
array_push($storeArray, $tempArray); 

$keys = array_keys($array, $a); 
foreach ($keys as $k) { 
unset($array[$k]); 
} //end of foreach ($keys as $k) 
} //end of if ($array[$count]) 

} //end of while ($count > 0) 

return $storeArray; 

} //end of function countSame($array) 
0
define('SEARCH_STRING', 'Ben'); 

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

$count = count(array_filter($myArray,function($value){return SEARCH_STRING === $value;})); 

echo $count, "\n"; 

uscita:

3 
0

array_count_values funziona solo per numeri interi e stringhe. Se vi capita di voler conteggi per valori float/numerici (e siete incuranti delle piccole variazioni di precisione o rappresentazione), questo funziona:

function arrayCountValues($arr) { 
    $vals = []; 
    foreach ($arr as $val) { array_push($vals,strval($val)); } 
    $cnts = array_count_values($vals); 
    arsort($cnts); 
    return $cnts; 
} 

Nota che torno $cnts con i tasti come stringhe. Sarebbe facile riconvertirli, ma sto cercando di determinare la modalità per i valori, quindi devo solo riconvertire i primi (diversi) valori.

Ho testato una versione in loop, creando una serie di conteggi invece di utilizzare array_count_values, e ciò si è rivelato più efficiente (forse dell'8-10%)!

Problemi correlati