2012-07-25 19 views
26

¿Cómo puedo contar el número de elementos dentro de una matriz con un valor igual a una constante? ejemplo,PHP - cuenta valores de matriz específicos

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

¿Cómo puedo saber directamente la cantidad de "Ben" está dentro?

Respuesta

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

gracias por responder. :) –

+4

¿y si la matriz es multidimensional? –

+3

@OkiErieRinaldi luego OP necesita actualizar la pregunta. – James

5

Utilice array_count_values() función. Compruebe este enlace http://php.net/manual/en/function.array-count-values.php

+0

Lo sé pero no da lo que quiero, devuelve todo el número del mismo elemento –

+0

@ ivory-santos ¿está seguro de que este método no es útil? ... consulte este enlace http://codepad.org/ Ye2x8uQD – swapnesh

+0

@ ivory-santos ¿no es exactamente lo que quieres? –

5

Utilice la función array_count_values.

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

echo $countValues["Ben"];

6

Puede hacer esto con array_keys y count.

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

Salida:

3 
+0

) Esta es la mejor respuesta porque no molesta a php contar todas las ocurrencias de todos los valores, solo devuelve las claves calificadas y las cuenta en una forma que nunca arrojará un 'Aviso'. En otras palabras,' echo count (array_keys ($ array, "purple")); 'prints' 0' sin' Notice' Este es un enfoque superior/más limpio frente a 'array_count_values() '. +1 – mickmackusa

0

Si desea contar todas las mismas ocurrencias encontradas en la matriz, esto es una función que contarlos todos, y devolver los resultados como una matriz multidimensional:

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"; 

salida:

3 
0

array_count_values solo funciona para enteros y cadenas. Si le sucede a querer recuentos de valores flotantes/numéricos (y que está sin hacer caso de las pequeñas variaciones en la precisión o representación), esto funciona:

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

Tenga en cuenta que vuelvo $cnts con las teclas como cadenas. Sería fácil reconvertirlos, pero estoy tratando de determinar el modo para los valores, por lo que solo tengo que volver a convertir los primeros (varios) valores.

Probé una versión que se realizó un bucle, creando una serie de conteos en lugar de utilizar array_count_values, y esto resultó ser más eficiente (¡quizás un 8-10%)!

Cuestiones relacionadas