kostenloser Webspace werbefrei: lima-city


Zufallswert aus Array darf sich nicht wiederholen.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo!

    Ich habe ein Array mit ein paar Werten:

    $input = array(	
    "Beispiel",
    "Beispiel2",
    "Beispiel3",
    );


    Dann habe ich zwei Felder, wo zwei zufällige dieser Werte ausgegeben werden.

    Jetzt will ich, dass aber nicht im ersten und zweiten Feld das gleich steht. Wie kann ich das machen?

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Jetzt will ich, dass aber nicht im ersten und zweiten Feld das gleich steht.
    <?php
    
    $data = array(
    	'Entry 1',
    	'Entry 2',
    	'Entry 3',
    	'Entry 4',
    	'Entry 5'
    );
    
    function arrayRand($array, $cnt) {
    	$result = array();
    	for($i = 0; $i < $cnt; $i++) {
    		$id = 0;
    		$double = true;
    		while($double) {
    			$id = rand(0, count($array) - 1);
    			$double = false;
    			for($j = 0; $j < $i; $j++) {
    				if($result[$j] == $id) {
    					$double = true;
    					break;
    				}
    			}
    		}
    		$result[] = $id;
    	}
    	$data = array();
    	for($i = 0; $i < $cnt; $i++)
    		$data[] = $array[$result[$i]];
    	return $data;
    }
    
    header('content-type: text/plain');
    $randomArray = arrayRand($data, 2); // für 2 verschiedene zufällige Werte
    print_r($randomArray);
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke aber geht das auch kürzer?
    Also der Code, der für den Zufall sorgt, sieht bei mir so aus:

    $input = array(
    	'Entry 1',
    	'Entry 2',
    	'Entry 3',
    	'Entry 4',
    	'Entry 5'
    );
    $rand_keys = array_rand($input, 2);
    
    echo $input[$rand_keys[0]] . "\n";


    Wie würde ich das jetzt mit meinem Code machen müssen?

    Gruß
  5. e******a

    Ich fände sowas sehr viel einfacher:
    $input = array('a', 'b', 'c');
    
    $i = rand(0, count($input) - 1);
    echo $input[$i];
    $j = rand(0, count($input) - 2);
    echo $i > $j ? $input[$j] : $input[$j + 1];


    Beitrag zuletzt geändert: 10.5.2012 20:28:34 von euphoria
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Wie würde ich das jetzt mit meinem Code machen müssen?
    So:
    $input = array(
    	'Entry 1',
    	'Entry 2',
    	'Entry 3',
    	'Entry 4',
    	'Entry 5'
    );
    
    function arrayRand($array, $cnt) {
    	$keys = array();
    	foreach($array as $name => $value)
    		$keys[] = $name;
    	$result = array();
    	for($i = 0; $i < $cnt; $i++) {
    		$id = 0;
    		$double = true;
    		while($double) {
    			$id = $keys[rand(0, count($array) - 1)];
    			$double = false;
    			for($j = 0; $j < $i; $j++) {
    				if($result[$j] == $id) {
    					$double = true;
    					break;
    				}
    			}
    		}
    		$result[] = $id;
    	}
    	return $result;
    }
    
    $rand_keys = arrayRand($input, 2); // für 2 verschiedene zufällige Werte
    echo $input[$rand_keys[0]] . "\n";


    euphoria schrieb:
    Ich fände sowas sehr viel einfacher:
    Das ist natürlich auch möglich, nur kannst du bei meiner Version auch sehr schnell 3 oder mehr verschiedene Werte anfordern (so wie bei
    array_rand()
    , nur dass hier keine doppelt vorkommen können).
    Falls der TE für immer und fix nur 2 Werte braucht und nie mehr oder weniger kann er deine Variante auch verwenden; meins war als Gegenstück zu
    array_rand()
    gedacht...
  7. e******a

    Anscheinend gibt array_rand sowieso schon nur einzigartige Keys zurück. :P
    Das haben wir wohl ganz toll einfach übersehen.

    Edit: Ein kurzer Test bestätigt das. Oder ich habe unverschämt viel Glück oder Pech.

    Beitrag zuletzt geändert: 10.5.2012 21:24:28 von euphoria
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    euphoria schrieb:
    Anscheinend gibt array_rand sowieso schon nur einzigartige Keys zurück. :P
    Das haben wir wohl ganz toll einfach übersehen.

    Edit: Ein kurzer Test bestätigt das. Oder ich habe unverschämt viel Glück oder Pech.
    Der Test stimmt, das haben hier echt alle übersehen...

    Dafür gibt es die Daten sortiert aus (aufsteigend)...

    Um das gewünschte Ergebnis mit genügend Zufälligkeit zu erreichen:
    $rand_keys = array_rand($input, 2);
    shuffle($rand_keys);
    danach ist
    $rand_keys
    wirklich zufällig und auch nicht mehr sortiert, es kommen auch keine doppelten Einträge vor...
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!