Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowanie liczb bez 0
Forum PHP.pl > Forum > PHP
pr0woKator
Witam,

mam taki kod:

  1. $nowe_liczby = range(1,49);
  2. $klucze = array_rand($nowe_liczby, 6);
  3. sort($klucze);
  4. $nowe_liczby = implode(",", $klucze);
  5. echo $nowe_liczby;


Ładnie on losuje mi te liczby i wypisuje po przecinku, ale... Czasami losuje 0 a ja chcę tylko liczby z przedziału 1-49. Czy jest jakaś inna funkcja aby to zrobić?
Kshyhoo
  1. srand((double)microtime()*1000000);
  2.  
  3. $ile = 6;
  4. $zilu = 49;
  5. $l=array();
  6.  
  7. for ($i=0;$i<$ile;$i++) {
  8. $liczba = rand(1, $zilu);
  9. if (in_array($liczba,$l)) $i--;
  10. else $l[$i] = $liczba;
  11. }
  12.  
  13. for ($i=0;$i<$ile;$i++) echo $l[$i]." ";
pr0woKator
Jakieś inne propozycje?
Kshyhoo
Cytat(pr0woKator @ 17.12.2013, 21:36:49 ) *
Jakieś inne propozycje?

A co Ci się nie podoba w mojej?
pr0woKator
Głównie chodzi mi o to co jest nie tak w moim kodzie. Dlaczego to cholerne 0 występuje skoro jest 1,49
sowiq
Bo funkcja array_rand zwraca wylosowane indeksy, a nie wartości. Klucze są numerowane od 0, dlatego czasami dostajesz 0.
Cytat
Picks one or more random entries out of an array, and returns the key (or keys) of the random entries.


Spróbuj tak:
  1. $array = range(1, 49);
  2. shuffle($array);
  3.  
  4. $random = array_slice($array, 0, 6);
  5. sort($random);
  6.  
  7. echo implode($random, ', ');


Albo podobnie jak robiłeś wcześniej, ale zmieniając klucze:
  1. $nowe_liczby = range(1,49);
  2. $nowe_liczby = array_combine($nowe_liczby, $nowe_liczby);
  3.  
  4. $klucze = array_rand($nowe_liczby, 6);
  5. sort($klucze);
  6. $nowe_liczby = implode(",", $klucze);
  7. echo $nowe_liczby;

Kshyhoo
Bo wyciągasz klucze tablicy a nie jej elementy?

EDIT: @sowiq wygrywa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.