2017-01-19 4 views
3

Wie kann ich in einem mehrdimensionalen Array die Anzahl der Elemente mit einer speziellen Bedingung zählen?Zählen Sie das Element aus einem Array in PHP

Array 
(
    [0] => Array 
     (
      [item] => 'Banana' 
     ) 

    [1] => Array 
     (
      [item] => 'Banana' 

     ) 

    [2] => Array 
     (
      [item] => 'Cherry' 
     ) 

    [3] => Array 
     (
      [item] => 'Apple' 

     ) 
) 

Zum Beispiel für diese Anordnung soll ich 2 für Banana finden.

Si Ich habe versucht:

$i=0; 
foreach($array as $arr) { 
    if($arr[item]=='Banana') { $i++; } 
} 

Gibt es eine bessere Lösung bitte?

Danke.

+0

Was ist los mit dieser Lösung? – Rasclatt

+1

Und ich denke, Sie werden mit Fehler in geworfen werden, wenn Bedingung "Artikel" ohne Anführungszeichen ist! – Thamilan

+0

können Sie kombinieren 'sizeof()' und 'array_filter()' –

Antwort

2

Methode 1:

Mit integrierten Funktionen - array_column und array_count_values:

print_r(array_count_values(array_column($arr,'item'))); 

Methode 2:

Mit foreach mit einfacher Logik des Anbringens Ihrer Frucht als Schlüssel und seine Zählung als Wert:

$arr = [ 
["item"=>"Banana"], 
["item"=>"Banana"], 
["item"=>"Cherry"], 
["item"=>"Apple"] 
]; 

$countArr = []; 

foreach ($arr as $value) { 
    $item = $value['item']; 
    if(array_key_exists($item, $countArr)) // If key exists, increment its value 
     $countArr[$item]++; 
    else          // Otherwise, assign new key 
     $countArr[$item] = 1; 
} 

print_r($countArr); 

Endergebnis in beiden Fällen wäre:

Array 
(
    [Banana] => 2 
    [Cherry] => 1 
    [Apple] => 1 
) 

Also, wenn Sie Banana gräflichen möchten, können Sie es wie folgt erhalten:

echo $countArr['Banana']; 
+0

Ihre Lösung ist interessanter als meine. :) –

+0

@FAD Schauen Sie sich die aktualisierte an! Einfachste mit eingebauten Funktionen – Thamilan

+0

Wie kann ich bei Ihrer ersten Methode das Element angeben, das ich zählen möchte (z. B. 'Banana')? –

0

Verwenden Sie array_count_values() Es ist ziemlich einfach:

foreach($array as $arr) { 
    $new[] = $arr['item']; 
} 

print_r(array_count_values($new)); 

Auf einer Seite zur Kenntnis, gibt es nichts falsch mit Ihrem Ansatz, es sei denn, Sie alle Werte zählen möchten. Auch eine Randnotiz, ich denke, dass Sie eine foreach() finden werden, wird eine etwas schnellere Zeit als array_column(), vor allem auf einem großen Array.

Verwandte Themen