• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP losowanie z wyjątakmi

Object Storage Arubacloud
0 głosów
115 wizyt
pytanie zadane 27 grudnia 2017 w PHP przez UltraSF Stary wyjadacz (11,740 p.)

Witam. Muszę wylosować liczbę mam metodę która przyjmuje array intów. Te inty to wyjątki (one nie mogą paść). Zatrzymałem się na takim etapie:

protected function getRandom(int $min, int $max, array $arr): int
{
        $int = random_int($min, $max);
}

I nie za bardzo wiem jak to optymalnie ugryźć :/ Oczywiście zależy mi na wydajności, bo tak to bym to wsadził w do while w foreach ale to będzie się "mielić" zbyt długo :/

komentarz 27 grudnia 2017 przez UltraSF Stary wyjadacz (11,740 p.)

Wykonałem to tak: 

    public function getRandom(int $min, int $max, array $ex): int
    {
    	$isEx = false;
        $int = random_int($min, $max);
        foreach ($ex as $value) {
        	if ($int === $value)
        		$isEx = true;
        }

        if (!$isEx) return $int;
        else return $this->getRandom($min, $max, $ex);
    }

Szybko mi dość liczyło 500 tyś liczb wiec sądzicie że to wydajna metoda czy nie? 

1 odpowiedź

0 głosów
odpowiedź 27 grudnia 2017 przez kosaa Stary wyjadacz (14,130 p.)
edycja 27 grudnia 2017 przez kosaa
 
Najlepsza
protected function getRandom(int $min, int $max, array $arr): int {
    do {
		$randval = random_int($min, $max);
	} while (in_array($randval, $arr));

	return $randval;
}

prosze bardzo

komentarz 27 grudnia 2017 przez UltraSF Stary wyjadacz (11,740 p.)
Byłem pewny że mój sposób bd szybszy ale nie :D Dzięki :3
komentarz 27 grudnia 2017 przez kosaa Stary wyjadacz (14,130 p.)
można by pewnie jeszcze przyśpieszyć usuwajac in_array ktory obstawiam ze z tego calego kody wykonuje sie najdluzej

moze jakas hash mapa i sprawdzanie po indeksach?

Podobne pytania

0 głosów
0 odpowiedzi 323 wizyt
0 głosów
2 odpowiedzi 544 wizyt
pytanie zadane 6 października 2018 w PHP przez damian9901 Bywalec (2,140 p.)
0 głosów
1 odpowiedź 623 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...