Zählen, wie oft ein String in einem Array vorkommt (Thema: PHP Beispiele)

Wie in PHP gezählt werden kann, wie oft ein bestimmter String in einem Array vorkommt

URL: http://www.rither.de/a/informatik/php-beispiele/arrays/zaehlen-wie-oft-ein-string-in-einem-array-vorkommt/

1. Zählen mit foreach-Schleife

Im nachfolgenden Beispiel wird gezeigt, wie mit einer foreach-Schleife leicht gezählt werden kann, wie oft ein bestimmter Wert in einem Array auftritt. Dazu wird ein Beispielarray $strs mit mehreren Werten definiert. Über $search wird festgelegt, dass das Auftreten des Buchstabens „c” gezählt werden soll. Diese Anzahl wird in $count gespeichert. Die foreach-Schleife iteriert nun über alle Werte in $strs und vergleicht jeden einzelnen mit $search (also, ob dieser „c” ist). Falls ja wird $count um 1 erhöht. Am Ende wird $count über var_dump() ausgegeben.

PHP-Code
<?php
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	$search = 'c';
	$count = 0;

	foreach ($strs as $val) {
		if ($val === $search) {
			$count++;
		}
	}

	var_dump($count);
?>

HTML-Code: Ausgabe
int(4)


1.1. foreach-Schleife in eigener Funktion

Das vorherige Beispiel bzw. die vorherige foreach-Schleife lässt sich leicht in eine Funktion auslagern. Hier wird dazu „getCountOfString($arr, $search)” definiert, welches als ersten Parameter das Array annimmt, in dem die Vorkommnisse von $search (zweiter Parameter) gezählt werden sollen. Am Ende wird ein Integer zurückgegeben. Im nachfolgenden Beispiel wird die Funktion definiert und nacheinander auf jeden Buchstaben des vorherigen Beispielarrays angewendet (also auf a, b und c).

PHP-Code
<?php
	function getCountOfString($arr, $search) {
		$count = 0;
		foreach ($arr as $val) {
			if ($val === $search) {
				$count++;
			}
		}
		return $count;
	}
	
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	var_dump(getCountOfString($strs, 'a'));
	var_dump(getCountOfString($strs, 'b'));
	var_dump(getCountOfString($strs, 'c'));
?>

HTML-Code: Ausgabe
int(2)
int(1)
int(4)


2. Unter Anwendung von array_intersect()

Das Iterieren über alle Werte ist recht umständlich. Praktischer wäre es wohl, aus dem Array alle nicht zu zählenden Werte automatisch entfernen zu können, denn dann wäre es möglich, durch einmaliges Anwenden von count() wiederum die Anzahl der zu zählenden Werte zu bestimmen. Um dies zu erreichen, kann die Funktion array_intersect($arr1, $arr2) verwendet werden. Diese bildet die Schnittmenge der Werte aus beiden Arrays. Die Rückgabe enthält also nur diejenigen Werte, die in $arr1 und gleichzeitig auch in $arr2 enthalten sind. Besteht zum Beispiel $arr2 nur aus dem Wert „x”, dann wird aus $arr1 jeder Wert entfernt, der nicht „x” ist.

Im nächsten Beispiel wird array_intersect() auf das Beispielarray angewendet. Alles, was nicht mit $search (hier der Buchstabe „c”) identisch ist, soll entfernt werden. Daher wird $search als Array und zweiter Parameter an array_intersect() übergeben. Auf das Ergebnis kann count() angewendet werden, um zu zählen, wie oft $search in $strs vorkommt.

PHP-Code
<?php
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	$search = 'c';
	$intersection = array_intersect($strs, array($search));
	$count = count($intersection);
	var_dump($intersection); // dieses Array enthaelt nur noch Werte, die mit $search identisch sind
	var_dump($count); // Anzahl von $search in $strs
?>

HTML-Code: Ausgabe
array(4) {
  [3]=>
  string(1) "c"
  [4]=>
  string(1) "c"
  [5]=>
  string(1) "c"
  [6]=>
  string(1) "c"
}
int(4)


3. Unter Anwendung von array_filter()

Sehr ähnlich zum Prinzip von array_intersect() kann auch array_filter($array, $callback) angewendet werden. Diese Funktion iteriert über alle Werte in $array und wendet auf jeden einzelnen die Funktion $callback an. Gibt die Funktion false zurück, dann wird der jeweilige Wert entfernt, ist also nicht Teil der Rückgabe. So lassen sich leicht alle Werte entfernen, die nicht mit dem gewünschten String $search identisch sind — für diese muss nur jeweils (bool)false zurückgegeben werden. Auf das Ergebnis von array_filter() (wiederum ein Array) muss dann nur noch count() angewendet werden, um herauszufinden, wie oft $search im Beispielarray vorkommt.

PHP-Code
<?php
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	$search = 'c';
	$filtered = array_filter($strs, function($val) use ($search) {
		return ($val===$search); // false zurueckgeben, wenn der Wert nicht identisch mit $search ist, sonst true
	});
	$count = count($filtered);
	var_dump($filtered); // dieses Array enthaelt nur noch Werte, die mit $search identisch sind
	var_dump($count); // Anzahl von $search in $strs
?>

HTML-Code: Ausgabe
array(4) {
  [3]=>
  string(1) "c"
  [4]=>
  string(1) "c"
  [5]=>
  string(1) "c"
  [6]=>
  string(1) "c"
}
int(4)


4. Alle Werte zählen mit array_count_values()

Von PHP wird eine Funktion zur Verfügung gestellt, über die gezählt werden kann, wie oft jeder einzelne Werte in einem Array vorkommt. Die Funktion heißt array_count_values($arr) und erwartet als Parameter das Array, in welchem die Werte gezählt werden sollen. Rückgabe ist ein Array, welches wiederum als Schlüssel den gezählten Wert und diesem zugeordnet die Anzahl enthält (array(Wert => Anzahl)). Im nächsten Beispiel wird array_count_values() ein mal auf das Beispielarray angewendet und dessen Rückgabe ausgegeben.

PHP-Code
<?php
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	$counts = array_count_values($strs);
	var_dump($counts);
?>

HTML-Code: Ausgabe
array(3) {
  ["a"]=>
  int(2)
  ["b"]=>
  int(1)
  ["c"]=>
  int(4)
}


5. Alle Werte mit foreach-Schleife zählen

Die vorherige Funktion — array_count_values() — lässt sich vergleichsweise einfach mit einer eigenen foreach-Schleife nachbauen. Der Aufbau ähnelt der foreach-Schleife weiter oben, welche nur gezielt nach einen bestimmten Wert sucht. Statt einem einzelnen Count-Wert $count hat man diesmal ein Array $counts. Bei jeder Iteration über das zu durchsuchende Array wird geprüft, ob der aktuelle Wert bereits in $counts enthalten ist, also mindestens ein mal zuvor gefunden wurde. Falls nein, wird er als neuer Schlüssel hinzugefügt und seine Anzahl auf 1 gesetzt ($counts[$val] = 1). Falls ja, wird der zuvor ermittelte Anzahlswert um 1 erhöht ($counts[$val]++).

PHP-Code
<?php
	function getCountsOfStrings($arr) {
		$counts = array();
		foreach ($arr as $val) {
			if (isset($counts[$val])) {
				$counts[$val]++;
			} else {
				$counts[$val] = 1;
			}
		}
		return $counts;
	}
	
	$strs = array('a', 'a', 'b', 'c', 'c', 'c', 'c');
	var_dump(getCountsOfStrings($strs));
?>

HTML-Code: Ausgabe
array(3) {
  ["a"]=>
  int(2)
  ["b"]=>
  int(1)
  ["c"]=>
  int(4)
}


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK