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 $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."); ?>
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 $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."); ?>
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 $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."); ?>
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 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)); ?>
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 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)); ?>
array(3) { [4]=> string(1) "a" [3]=> string(2) "ab" [0]=> string(3) "abc" } string(1) "a"