¿Cómo puedo contar el número de elemento dentro de un array con el valor de es igual a una constante?
ejemplo,

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

¿cómo puedo directamente saber cuántos «Ben» en el interior?

InformationsquelleAutor Ivo San | 2012-07-25

10 Comentarios

  1. 98
    $array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben");
    $counts = array_count_values($array);
    echo $counts['Ben'];
    • ¿qué pasa si la matriz es multidimensional?
    • a continuación, OP necesidades para la actualización de la pregunta.
    • Puede usted por favor me dan una referencia ?
    • Primero, ASÍ que el resultado que he encontrado en google: Recuento de valores específicos en la matriz multidimensional – a ver si eso funciona para multidimensionals.
    • funciona para los 2 niveles de profundidad. si la matriz es más profundo, tenemos que añadir más de iteración. Me hizo mediante la construcción de función recursiva.
    • De niza. Acaba de publicar ese vínculo para el futuro de Google que están buscando una solución multidimensional.
    • si se tiene en cuenta un elemento que no está en la matriz, se mostrará Notice: Undefined index
    • ¿sabes cómo puedo solucionar este problema?? En mi caso necesito de salida de 4 variables de javascript. Ya he probado con isset($codes['T'])? $codes['T']:'' donde $códigos es el = array_count_values(
    • Para valores de coma flotante conseguir esto: Warning: array_count_values(): Can only count STRING and INTEGER values! ¿cuál es la solución?

  2. 16

    Usted puede hacer esto con array_keys y contar.

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

    De salida:

    3
    • Esta es la mejor respuesta porque no se molesta en php para contar todas las ocurrencias de todos los valores, sólo devuelve la calificación de las teclas y cuenta de una manera que nunca va a lanzar una Notice. En otras palabras, echo count(array_keys($array, "purple")); imprime 0 sin Notice Este es un superior / limpiador de enfoque frente a la array_count_values(). +1
    • He probado este código vs el código de @Rajat Singhal publicado. PHP-Sandbox. En PHP las 7 de la count(array_keys()) solución siempre es más rápido. En PHP 5.6 el array_count_values() versión es más rápida para matrices con menos elementos diferentes. Todo en ambas funciones son bastante rápidos (al menos para las matrices se estaba probando)
  3. 5

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

    • Sé que, pero no le da lo que yo quiero, devuelve toda la serie de un mismo elemento
    • está usted seguro de que este método no es útil ??..revise este enlace codepad.org/Ye2x8uQD
    • ¿no es lo que quieren exactamente?
    • en realidad, no 🙂 tengo la respuesta, no sé que últimamente después de contar que es posible contar[‘Ben’]. gracias
    • todo bien 🙂 ocurre (al menos desde mi experiencia en programación ..lol)
  4. 4

    En mi caso de dos dimensiones de la matriz, a partir de PHP Oficial de los comentarios de la Página, me encontré con el útil fragmento de para una matriz bidimensional

    <?php
    
    $list = [
      ['id' => 1, 'userId' => 5],
      ['id' => 2, 'userId' => 5],
      ['id' => 3, 'userId' => 6],
    ];
    $userId = 5;
    
    echo array_count_values(array_column($list, 'userId'))[$userId]; //outputs: 2
    ?>
  5. 2
    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";

    De salida:

    3
  6. 0

    Si quieres contar a TODOS la misma ocurrencias dentro de la matriz, he aquí una función para contar a todos ellos, y devolver el resultado 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)
  7. 0

    array_count_values sólo funciona para los números enteros y cadenas. Si por casualidad usted quiere que cuenta para flotar/valores numéricos (y son indiferentes a las pequeñas variaciones en la precisión o la 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;
    }

    Nota que vuelvo $cnts con las teclas en forma de cadenas. Sería fácil para reconvertir a ellos, pero estoy tratando de determinar la modo por los valores, por lo que sólo necesita para volver a convertir la primera (varios) de los valores.

    He probado una versión en bucle, la creación de una matriz de cuenta en lugar de utilizar array_count_values, y esto resultó ser más eficiente (por unos 8 a 10%)!

Dejar respuesta

Please enter your comment!
Please enter your name here