Einen zufälligen Wert aus einem Array auslesen (Thema: PHP Beispiele)

Wie man per Zufall einen einzelnen Wert aus einem Array "herausnimmt" und zum Beispiel ausgibt

Eine Möglichkeit zum Laden eines zufälligen Wertes aus einem Array ist die Kombination von array_keys() und mt_rand():
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'foo'=>'drei', 'vier', 'bar'=>'fünf');
	$keys = array_keys($arr);
	// Per Zufall die Nummer eines Schlüssels bestimmen
	$randomKey = mt_rand(0, count($arr)-1);
	// Den Wert zum zufälligen bestimmten Schlüssel ausgeben
	var_dump($arr[$keys[$randomKey]]);
?>
Ausgabe
string(4) "vier"

Das vorherige Beispiel ließe sich auch dahingehend vereinfachen, dass statt array_keys() einfach array_values() verwendet wird. Dann könnte per Zufall ein gültiges Offset bestimmt und der Wert an diesem Offset ausgegeben werden. (Sozusagen also „gebe den x-ten Wert aus, wobei x per Zufall bestimmt wird und zwischen 0 und der Anzahl der Elemente im Array minus eins liegt”. Minus eins, da die Zählung bei 0 und nicht bei 1 beginnt.) Dieses Vorgehen wäre einfacher, hat allerdings den Nachteil, dass man nur den Wert und nicht den Schlüssel des Wertes erfährt. (Je nach Anwendung kann das unproblematisch sein.) Der veränderte Code würde dann lauten:
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'foo'=>'drei', 'vier', 'bar'=>'fünf');
	$values = array_values($arr);
	var_dump($values[mt_rand(0, count($arr)-1)]);
?>
Ausgabe
string(4) "drei"

Falls sicher ist, dass die Schlüssel des Arrays aufsteigend von 0 bis n gehen (0, 1, 2, 3, 4, 5, ...), kann auch direkt der Wert zum Schlüssel „mt_rand(0, Anzahl Elemente im Array - 1)” ausgelesen werden (also ohne array_keys() oder array_values() verwenden zu müssen).
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'vier', 'fünf');
	var_dump($arr[mt_rand(0, count($arr)-1)]);
?>
Ausgabe
string(4) "drei"

Alternativ kann auch das Array per shuffle() zufällig sortiert und der erste Wert verwendet werden.
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'foo'=>'drei', 'vier', 'bar'=>'fünf');
	$arrValues = array_values($arr);
	shuffle($arrValues);
	var_dump($arrValues[0]);
?>
Ausgabe
string(4) "fünf"

Kommentare (1)

Von neu nach alt
Hallo, wie mache ich das er mir z.B. string(4) nicht ausgibt? Ich brauche nur den wert der bei string 4 gespeichert ist.
G (Gast) #