Den kürzesten/längsten String in einem Array finden (Thema: PHP Beispiele)

Wie ein oder mehr kürzeste oder längste Strings in einem PHP-Array identifiziert werden können

1. Längster String mit foreach-Schleife

Zur Bestimmung des längsten Strings in einem Array kann mit einer foreach-Schleife über alle Elemente iteriert und für jedes Element die Zeichenlänge mit dem bisher gefundenen Maximalwert verglichen werden. Bei der ersten Iteration kann das Element direkt als Maximum verwendet werden. Die Bestimmung der Stringlänge erfolgt am besten über mb_strlen($string), welches die Länge des Strings $string zurückgibt und auch Multibyte-Zeichen nur ein mal zählt.

PHP-Code
<?php
	$longestKey = null;
	$longestStrlen = null;
	$arr = array('abc', 'abcdefg', 'abcd', 'ab', 'a', 'abcdef', 'abcdefghijkl', 'abcd');

	foreach ($arr as $key=>$val) {
		// als Maximum verwenden, falls erste Iteration oder falls Laenge ueber allen bisherigen Werten liegt
		if ($longestKey===null || mb_strlen($val)>$longestStrlen) {
			$longestKey = $key;
			$longestStrlen = mb_strlen($val);
		}
	}

	echo("Der längste String im Array hat den Index $longestKey ('{$arr[$longestKey]}') und besteht aus $longestStrlen Zeichen.");
?>

HTML-Code
Der längste String im Array hat den Index 6 ('abcdefghijkl') und besteht aus 12 Zeichen.

2. Kürzester String mit foreach-Schleife

Das Finden des kürzesten Strings im Array erfolgt analog zu den vorherigen Beschreibungen. Einzig das größer-als (>) muss durch ein kleiner-als (<) ersetzt werden.

PHP-Code
<?php
	$shortestKey = null;
	$shortestStrlen = null;
	$arr = array('abc', 'abcdefg', 'abcd', 'ab', 'a', 'abcdef', 'abcdefghijkl', 'abcd');

	foreach ($arr as $key=>$val) {
		if ($shortestKey===null || mb_strlen($val)<$shortestStrlen) {
			$shortestKey = $key;
			$shortestStrlen = mb_strlen($val);
		}
	}

	echo("Der kürzeste String im Array hat den Index $shortestKey ('{$arr[$shortestKey]}') und besteht aus $shortestStrlen Zeichen.");
?>

HTML-Code
Der kürzeste String im Array hat den Index 4 ('a') und besteht aus 1 Zeichen.

3. Mit Sortierung und mb_strlen()

Eine weitere mögliche Methode ist die Kombination aus mb_strlen() (Berechnung der Stringlängen) und asort() (aufsteigende Sortierung) bzw. arsort() (absteigende Sortierung). (asort() behält die Schlüssel-Wert-Zuordnungen bei, während sort() die Schlüssel neu setzt.) Dazu wird das Ausgangsarray ein mal kopiert und jeder einzelne String durch seine Länge ersetzt. Die Iteration über alle Strings erfolgt mit array_map($callback, $array), die Stringlänge wird mit mb_strlen() bestimmt. Wurde dies erledigt, dann können die Längen mit asort() aufsteigend sortiert werden. Da die Schlüssel-Wert-Zuordnung beibehalten wurde, lässt sich nun etwa bestimmen, welchen Schlüssel das Element mit dem kürzesten String hat.

PHP-Code
<?php
	$arr = array('abc', 'abcdefg', 'abcd', 'ab', 'a', 'abcdef', 'abcdefghijkl', 'abcd');
	$arr2 = array_map('mb_strlen', $arr); // jeden Wert durch seine Laenge ersetzten
	asort($arr2, SORT_NUMERIC); // wie sort(), aber behaelt Schluessel-Wert-Assoziationen bei

	// Schluessel des ersten Elements bestimmen (entspricht demjenigen mit dem kuerzesten Strings)
	reset($arr2);
	$key = key($arr2);

	$val = $arr[$key]; // kuerzester String
	$strlen = $arr2[$key]; // Laenge des kuerzesten Strings
	echo("Der kürzeste String im Array hat den Index $key ('$val') und besteht aus $strlen Zeichen.");
?>

HTML-Code
Der kürzeste String im Array hat den Index 4 ('a') und besteht aus 1 Zeichen.

3.1. Die n längsten Strings

Anhand des zuvor beschriebenen Vorgehens werden nun zwei Funktionen definiert. Die erste — getLongestStrings($array, $count) — gibt die $count längsten Strings im Array zurück. Die Rückgabe ist ein Array, beginnend mit dem längsten String. Der Schlüssel jedes Elements entspricht jeweils dem Schlüssel des Strings im ursprünglich übergebenen Array. Die Funktion getLongestString(array $arr) wiederum gibt nur den längsten String zurück. (Rückgabe ist also String, nicht Array.)

PHP-Code
<?php
	function getLongestStrings(array $arr, $count) {
		$arr2 = array_map('mb_strlen', $arr);
		arsort($arr2, SORT_NUMERIC);
		$arr2 = array_slice($arr2, 0, $count, true);


		// Der Aufbau des Ergebnisarrays ist noch Schluessel => Laenge,
		// mit array_walk wird jedem Schluessel sein String zugeordnet (Schluessel => String)
		array_walk($arr2, function(&$val, $key) use ($arr) {
			$val = $arr[$key];
		});
		return $arr2;
	}

	function getLongestString(array $arr) {
		$a = getLongestStrings($arr, 1);
		return array_pop($a);
	}

	$arr = array('abc', 'abcdefg', 'abcd', 'ab', 'a', 'abcdef', 'abcdefghijkl', 'abcd');
	var_dump(getLongestStrings($arr, 3));
	var_dump(getLongestString($arr));
?>

HTML-Code
array(3) {
  [6]=>
  string(12) "abcdefghijkl"
  [1]=>
  string(7) "abcdefg"
  [5]=>
  string(6) "abcdef"
}
string(12) "abcdefghijkl"


3.2. Die n kürzesten Strings

Analog zu den Funktionen bezüglich der n längsten Strings, sind hier die beiden zum Finden der kürzesten Strings implementiert. Die Sortierfunktion ändert sich von arsort($array) (absteigende Sortierung) zu asort($array) (aufsteigende Sortierung), wodurch die Rückgabe mit dem kürzesten String beginnt.

PHP-Code
<?php
	function getShortestStrings(array $arr, $count) {
		$arr2 = array_map('mb_strlen', $arr);
		asort($arr2, SORT_NUMERIC);
		$arr2 = array_slice($arr2, 0, $count, true);

		// Der Aufbau des Ergebnisarrays ist noch Schluessel => Laenge,
		// mit array_walk mit jedem Schluessel sein String zugeordnet (Schluessel => String)
		array_walk($arr2, function(&$val, $key) use ($arr) {
			$val = $arr[$key];
		});
		return $arr2;
	}

	function getShortestString(array $arr) {
		$a = getShortestStrings($arr, 1);
		return array_pop($a);
	}

	$arr = array('abc', 'abcdefg', 'abcd', 'ab', 'a', 'abcdef', 'abcdefghijkl', 'abcd');
	var_dump(getShortestStrings($arr, 3));
	var_dump(getShortestString($arr));
?>

HTML-Code
array(3) {
  [4]=>
  string(1) "a"
  [3]=>
  string(2) "ab"
  [0]=>
  string(3) "abc"
}
string(1) "a"


Kommentare (0)

Von neu nach alt