Mam tablicę o nazwie $ran = array(1,2,3,4);
Muszę pobrać losową wartość z tej tablicy i zapisać ją w zmiennej, jak mogę to zrobić?
Możesz też po prostu:
$k = array_rand($array);
$v = $array[$k];
To jest sposób na zrobienie tego, gdy masz tablicę asocjacyjną.
array_rand
nie jest tak przypadkowy, jak powinienarray_rand_value
array_rand()
używa generatora Mersenne Twister: rand () z aliasem do mt_rand () i srand () z aliasem do mt_srand () . W praktyce powinno być teraz wystarczająco dobre.PHP udostępnia funkcję właśnie do tego: array_rand ()
http://php.net/manual/en/function.array-rand.php
źródło
array_rand
funkcji jest1
taka, więc nie trzeba jej pisać.Możesz użyć mt_rand ()
Przydaje się to również jako funkcja, jeśli potrzebujesz wartości
źródło
array_rand
nie jest tak losowy, jak powinien, więcmt_rand
jest preferowanyisset
części? To i tak nie powiedzie się dla tablic asocjacyjnych.mt_rand
zamiastrand
w tym przypadku wydaje się, że wolę niektóre elementy bardziej niż inneźródło
Możesz użyć funkcji array_rand, aby wybrać losowy klucz z tablicy, jak poniżej.
lub możesz użyć funkcji rand i count, aby wybrać losowy indeks.
źródło
Pochodzi z Laravel
Collection::random()
:Stosowanie:
Kilka uwag:
$amount
musi być mniejsze lub równecount($array)
.array_rand()
nie tasuje kluczy (od PHP 5.2.10, zobacz 48224 ), więc wybrane elementy zawsze będą w oryginalnej kolejności. Wshuffle()
razie potrzeby użyj później.Dokumentacja:
array_rand()
,shuffle()
edycja: Funkcja Laravel znacznie się rozwinęła od tego czasu, zobacz Laravel 5.4
Arr::random()
. Oto coś bardziej wyszukanego, wywodzącego się z funkcji Laravela dla dorosłych:Kilka najważniejszych informacji:
array_random($array, 1)
zwraca tablicę jednego elementu ( # 19826 )źródło
array_rand
Funkcja wydaje się mieć nierówną dystrybucję na dużych tablicach, nie każdy element tablicy jest równie prawdopodobne, aby odebrał. Użycie shuffle na tablicy, a następnie pobranie pierwszego elementu nie ma tego problemu:źródło
mt_rand()
prawdopodobnie lepiej pasują do tego zadania.Inne podejście polegające na odwracaniu tablicy w celu uzyskania bezpośredniej wartości.
Skrawek
array_rand
zwracany klucz, a nie wartość. Więc odwracamy wartość jako klucz.Uwaga: klucz PHP zawsze jest kluczem unikalnym, więc po odwróceniu tablicy zduplikowana wartość klucza zostanie nadpisana.
źródło
$array[array_rand($array)];
?array_flip
usuń duplikat jako klucz, a następnie podaj wynik ... Oznacza brak duplikatów!lub, w szczególności dla tablic:
źródło
W moim przypadku muszę uzyskać 2 wartości, które są obiektami. Podzielam to proste rozwiązanie.
źródło
Czy Twój wybór ma wpływ na bezpieczeństwo? Jeśli tak, użyj
random_int()
iarray_keys()
. (random_bytes()
jest tylko PHP 7, ale istnieje polifill dla PHP 5 ).Stosowanie:
Demo: https://3v4l.org/1joB1
źródło
Użyj rand (), aby uzyskać losową liczbę i echo losowego klucza. Na przykład: 0 - 3
źródło
Jedna linia:
$ran[rand(0, count($ran) - 1)]
źródło
Potrzebowałem wersji z jedną linią dla krótkiej tablicy:
lub jeśli tablica jest naprawiona:
źródło
On-line:
źródło
Będzie to dobrze działać z tablicami wbudowanymi. Poza tym myślę, że rzeczy są bardziej uporządkowane i nadają się do wielokrotnego użytku, gdy są opakowane w funkcję.
Stosowanie:
W PHP <7.1.0
array_rand()
używarand()
, więc nie chciałbyś używać tej funkcji do niczego związanego z bezpieczeństwem lub kryptografią. W PHP 7.1.0+, użyj tej funkcji bez obaw, ponieważrand()
została utworzona aliasmt_rand()
.źródło
Opieram swoją odpowiedź na funkcji @ ÓlafurWaage. Próbowałem go użyć, ale napotkałem problemy z odwołaniami, gdy próbowałem zmodyfikować zwracany obiekt. Zaktualizowałem jego funkcję, aby przekazywała i wracała przez odniesienie. Nowa funkcja to:
Aby uzyskać więcej kontekstu, zobacz moje pytanie w Przekazywanie / zwracanie odniesień do obiektu + zmiana obiektu nie działa
źródło
Prosty sposób na uzyskanie wartości Randdom z tablicy .
teraz za każdym razem otrzymasz różne kolory z Array .
źródło
Otrzymujesz losową liczbę z tablicy w następujący sposób:
źródło