Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
<?php
function array_rand_new($arr, $num = 1)
{
$keys = array_keys($arr);
$num_keys = count($keys);
if ($num > $num_keys) {
// eigentlich Warning der Form: array_rand(): Second argument has to be between 1 and the number of elements in the array
return NULL;
}
if ($num < 2) {
return $keys[rand(0, $num_keys - 1)];
} else {
$random_keys = array(); // Hashliste, interessieren nur die Keys, Werte sind egal deshalb immer 1
for ($i = 1; $i <= $num; $i++) {
do {
$key = rand(0, $num_keys - 1);
} while(isset($random_keys[$keys[$key]]));
$random_keys[$keys[$key]] = 1;
}
return array_keys($random_keys);
}
}
$myarr = array('bar' => 1, 'foo' => 2, 'baz' => 3);
var_dump(array_rand($myarr, 2));
var_dump(array_rand_new($myarr, 2));
$random_keys = array();
for ($i = 1; $i <= $num; $i++) {
do {
$key = rand(0, $num_keys - 1);
} while(in_array($keys[$key], $random_keys));
$random_keys[] = $keys[$key];
}
return $random_keys;
$var = array(
1 => "das ist test0",
"test1" => "hallo du",
"test2" => "hallo welt",
"test3" => 123456,
"test4" => 6543,
"test5" => 987,
"test6" => "dad"
);
$anzahl = 5;
function nachbau_arrayrand($var, $anzahl){
if(!is_int($anzahl))
return "";
if($anzahl > count($var))
return "error";
if($anzahl == 0)
return "error";
else{
foreach(range(0, $anzahl) as $array_zufall)
return $array_zufall;
}
}
Loon3y: ich weiß nicht warum du da mir foreach() ran willst, du musst ja nicht jeden Element anfassen, sondern nur eine konkrete Menge von zufälligen Indizes des Arrays erzeugen.
for ($i = 1; $i <= $num; $i++) {
do {
$key = rand(0, $num_keys - 1);
} while(isset($random_keys[$keys[$key]]));
$random_keys[$keys[$key]] = 1;
}
warum sollte man array_rand nicht benutzen? ;ugl
ka komm irgendwie garnet weiter :|
Edit:
dies versteh ich nicht so ganz..könnte das wer erklären? :-(PHP:for ($i = 1; $i <= $num; $i++) { do { $key = rand(0, $num_keys - 1); } while(isset($random_keys[$keys[$key]])); $random_keys[$keys[$key]] = 1; }
$aSrc = array(
1 => "das ist ein test",
"test1" => "hallo du",
"test2" => "hallo welt",
"test3" => 123456,
"test4" => 6543,
"test5" => 987,
"test6" => "dad"
);
$anzahl = 5;
function nachbau_arrayrand($aSrc, $anzahl){
if(count($aSrc) == 0)
return null;
if(!is_int($anzahl) || $anzahl <= 0)
return null;
if($anzahl > count($aSrc))
return null;
$aReturn = array();
for($i = 1; count($aReturn) <= $anzahl; $i++){
$key = rand(1, count($aSrc)-1);
$j = 0;
foreach($aSrc as $k => $v){
$j++;
if($j == $key && !in_array($k, $aReturn))
array_push($aReturn, $k);
}
}
return $aReturn;
}
echo "\nNachbau:\n";
print_r(nachbau_arrayrand($aSrc, $anzahl)) ."\n";
echo "\nOriginal:\n";
print_r(array_rand($aSrc, $anzahl));
$aSrc = array(
1 => "das ist ein test",
"test1" => "hallo du",
"test2" => "hallo welt",
"test3" => 123456,
"test4" => 6543,
"test5" => 987,
"test6" => "dad"
);
$anzahl = 5;
function nachbau_arrayrand($aSrc, $anzahl){
if(count($aSrc) == 0)
return null;
if(!is_int($anzahl) || $anzahl <= 0)
return null;
if($anzahl > count($aSrc))
return null;
$aKeys = array_keys($aSrc);
$aReturn = array();
while(count($aReturn) < $anzahl){
$key = rand(0, count($aKeys)-1);
array_push($aReturn, $aKeys[$key]);
unset($aKeys[$key]);
$aKeys = array_values($aKeys);
}
return $aReturn;
}
echo "\nNachbau:\n";
print_r(nachbau_arrayrand($aSrc, $anzahl)) ."\n";
echo "\nOriginal:\n";
print_r(array_rand($aSrc, $anzahl));
/**
* @PARAM array $input
* @PARAM int $num_req
* @RETURN mixed
*/
function _array_rand($input, $num_req = 1) {
// check $input type
if(!is_array($input)) {
die('Illegal argument'); // or throw an exception ;)
}
// check $num_req type
if(!is_int($num_req)) {
die('Illegal argument'); // or throw an exception ;)
}
// check $num_req size
if($num_req < 1) {
die('Illegal argument'); // or throw an exception ;)
}
// define needed vars
$idxArray = array();
$returning = array();
// get some random numbers
$arraySize = count($input) - 1;
for($i = 0; $i < $num_req; $i++) {
do {
$randomNumber = mt_rand(0, $arraySize);
} while(in_array($randomNumber, $idxArray));
array_push($idxArray, $randomNumber);
}
// get the array keys
$index = 0;
foreach($input as $key => $val) {
if(in_array($index, $idxArray)) {
array_push($returning, $key);
}
$index++;
}
return (count($returning) == 1 ? $returning[0] : $returning);
}
und es werden so viele schlüssel gefordert wie das array elemente hat. okay die formulierung von mir ist vielleicht nicht ganz korrekt. :) das ergebnis ist aber das gleiche, da $num der menge an elementen im array entsprichtDie for-Schleife durchläuft das Array nicht, die erzeugt nur so viele Schlüssel wie gefordert werden.
was man vielleicht damit umgehen könnte, indem man zuerst ein eindimensionales array mit allen vorhanden werten befüllt und erst dann deine funktion anwendet.....Was passiert bei verschachtelten Arrays.