2012-07-19 13 views
6

Estoy tratando de contar la cantidad de veces que aparece un determinado valor en mi matriz multidimensional en función de una condición. Aquí hay una matriz de ejemplo;Contar valores específicos en matriz multidimensional

$fruit = array (
       "oranges" => array(
            "name" => "Orange", 
            "color" => "orange", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "apples" => array(
            "name" => "Apple", 
            "color" => "green", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "bananas" => array(
            "name" => "Banana", 
            "color" => "yellow", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "grapes" => array(
            "name" => "Grape", 
            "color" => "green", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ) 
      ); 

Si desea mostrar todas las frutas de color verde, que pueda hacer lo siguiente (que me haga saber si esta es la mejor manera de hacerlo);

for ($row = 0; $row < 3; $row++) { 

    if($fruit[$row]["color"]=="green") { 

     echo $fruit[$row]["name"] . '<br />'; 

    } 

} 

Esto dará salida;

Apple 
Grape 

Eso está muy bien y puedo ver su son 2 valores allí, pero ¿cómo puedo conseguir realmente PHP para contar el número de frutos, donde el color es verde y lo puso en una variable para que yo use más abajo en la script para trabajar cosas? P.ej. Quiero hacer algo como;

if($number_of_green_fruit > 1) { echo "You have more than 1 piece of green fruit"; } 

He echado un vistazo a count(); pero no veo ninguna forma de agregar una cláusula 'WHERE/condicional' (a la SQL).

Cualquier ayuda sería muy apreciada.

+0

En lugar de repetir el nombre, haga la cuenta. 0 + 1 + 1 + 1 + 1 .... – hakre

Respuesta

8
$number_of_green_fruit = 0; 
for ($row = 0; $row < 3; $row++) { 
    if($fruit[$row]["color"]=="green") { 
     $number_of_green_fruit++; 
     echo $fruit[$row]["name"] . '<br />'; 
    } 
} 
+0

1 segundo más rápido que yo ;-) +1 – DaveRandom

+0

@DaveRandomL Yep +1 a ti también :) Parece que OP solo ha visto tu respuesta: P – Blaster

+0

Muchas gracias a Vosotros dos. – user1221488

4

Todo lo que necesita es un contador adicional:

for ($row = $number_of_green_fruit = 0; $row < 3; $row++) { 
    if($fruit[$row]["color"]=="green") { 
     echo $fruit[$row]["name"] . '<br />'; 
     $number_of_green_fruit++; 
    } 
} 

if($number_of_green_fruit > 1) { 
    echo "You have more than 1 piece of green fruit"; 
} 
+0

Me siento como un tonto ahora, muchas gracias amigo, aceptaré la solución en 9 minutos cuando me lo permita. – user1221488

8

PHP no tiene soporte para un tipo de cosas SQL where, especialmente no con una matriz de matrices. Pero se puede hacer el recuento de su propia mientras que iterar sobre los datos:

$count = array(); 
foreach($fruit as $one) 
{ 
    @$count[$one['color']]++; 
} 

printf("You have %d green fruit(s).\n", $count['green']); 

La alternativa es escribir un poco de poca función auxiliar:

/** 
* array_column 
* 
* @param array $array rows - multidimensional 
* @param int|string $key column 
* @return array; 
*/ 
function array_column($array, $key) { 
    $column = array(); 
    foreach($array as $origKey => $value) { 
     if (isset($value[$key])) { 
      $column[$origKey] = $value[$key]; 
     }    
    } 
    return $column; 
} 

A continuación, puede obtener todos los colores:

$count = array_count_values($colors); 
printf("You have %d green fruit(s).\n", $count['green']); 
:
$colors = array_column($fruit, 'color'); 

Y entonces valores de recuento

Ese tipo de función de ayuda a menudo es útil para matrices multidimensionales. También es suggested as a new PHP function for PHP 5.5.

+0

+1 Agradable ..... – Baba

Cuestiones relacionadas