Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie
Forum PHP.pl > Forum > Przedszkole
Przemek19
Witam. Mam pewien problem, który wydaje się banalny. Otóż chciałbym stworzyć taką zmienną $zmienna["x"]["y"] 5 razy, tak, aby za każdym razem nie była taka sama. Np.

Kod
<?php

$ilosc = 5;

for($i = 0; $i < $ilosc; $i++)
{

    $rand_x = rand(0,10);
    $rand_y = rand(0,10);

    $zmienna[$rand_x][$rand_y] = true;

}

?>


To tworzy 5 razy zmienną, ale czasami jest ona taka sama jak wcześniej. Dałoby się zrobić to tak, aby za każdym razem była inna?

PS przepraszam za niejasny język, ale jestem niewyspany i cały dzień myślałem nad poprawnością powyższego kodu.
markuz
Musisz sprawdzać czy taki klucz już istnieje w tablicy (isset), jeżeli nie - to dodajemy, jeżeli istnieje to losujemy ponownie do skutku (pętlą while).
wolguy
ale chcesz uzyskać zmienna[x][y] = losowa, czy zmienna[los1][los2] = boolean ?
nospor
No przeciez wyraznie widac co losuje

zmienna[los1][los2] = boolean

wink.gif

@markuz to rozwiazanie ma jedna wade: teoretycznie moze trwac wieki, praktycznie w tym przypadky tak nie bedzie, ale i tak wykona zapewne wiecej operacji niz powinien.

Lepsze wydaje sie w tym wypadku wygenerowanie poprostu tablicy z 10 elementami, a potem dac
http://php.net/manual/en/function.shuffle.php
i pobrac pierwsze 5 elementow. 100% pewnosci ze sie zakonczy wink.gif
Pyton_000
A mógłbyś powiedzieć do czego Ci taka tablica?
nospor
Ja wiem, ja wiem... znaczy ja zgaduje, ja zgaduje:
Kolega Przemek ma mape/plansze i chce na tej mapie/plansze rozlozyc losowo jakies elementy smile.gif
Przemek19
Tak, robię coś w stylu sapera. Wszystko działa, tylko zostało mi losowanie bomb. W ustawieniach mam taką zmienną jak $sets['bombs'], która pokazuje ile bomb ma się znaleźć na planszy. Jest jeszcze zmienna $pole['szerokosc'] i $pole['wysokosc'], które tworzą rozmiar planszy, jako X jest oznaczona wysokość, a jako Y szerokość. Jak mówiłem, niby takie proste, ale nie chce działać. Zrobiłem takie coś dla losowania, ale nadal nie działa:

Kod
for($i = 0; $i < $ilosc; $i++)
{

    $rand_x = rand(0,10);
    $rand_y = rand(0,10);

    $zmienna[$rand_x][$rand_y] = true;

    if(isset($zmienna[$rand_x][$rand_y]))
    {

        $i--;

    }

}


Spróbuję coś zrobić z funkcją shuffle, Chociaż wydaje mi się, że wtedy np. X, skoro będzie musiał być inny za każdym razem, to na jedną wysokość, będzie tylko jedna bomba. Ma ktoś może jakiś pomysł jak to zastosować? Będę bardzo wdzięczny biggrin.gif
Pyton_000
W ramach porannego rozespania i nie kontaktowania skrótu na refactoring ...
  1. $width = 10;
  2. $height = 10;
  3. $ilosc = 5;
  4.  
  5. $pseudoMatrix = [];
  6. for ($i=0; $i<$width*$height; $i++) {
  7. $pseudoMatrix[floor($i/10).'.'.($i%10)] = true;
  8. }
  9. $bombs = array_rand($pseudoMatrix, $ilosc);
  10. foreach ($bombs as $bomb) {
  11. list($x, $y) = explode('.', $bomb);
  12. // ....
  13. }
Przemek19
Bardzo dziękuję za pomoc! Można jeszcze prosić o zapisanie tego w formie zmiennej $_SESSION['bombs'][$x][$y] = true;? Bo uczę się PHP dopiero kilka miesięcy i jeszcze nie znam funkcji list, explode i array_rand. tongue.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.