Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] rand a tablica
Forum PHP.pl > Forum > Przedszkole
Regyam
Mam taki problem, gdy tworze tablice dwuwymiarowa i wypelniam ją zerami, to 15 pól chce wypełnić jedynkami; robie to tak:
  1. <?php
  2. for ($i=1; $i<=15; $i++){
  3. $tablica[rand(1,10)][rand(1,10)] = "1";
  4. }
  5. ?>

Niby wypełnia, ale.. problem tkwi w tym ze zdarza sie ze wylosuje pare dwa razy taka sama i w gruncie rzeczy pól w tablicy z jedynką mamy 14 a nie jak chcieliśmy 15. Czy wie ktoś jak można to poprawić?
Darti
  1. <?php
  2. while ($loop <15){
  3. $i = rand(1,10);
  4. $j = rand(1,10);
  5. $i_tab[] = $i;
  6. $j_tab[] = $j;
  7. if(!in_array($i,$i_tab) && !in_array($j,$j_tab)){
  8. $tablica[$i][$j] = "1";
  9. $loop++;
  10. }
  11. }
  12. ?>
strife
Tak dla ścisłości, to jeżeli chcesz wypełnić tablicę jedynkami (liczba), to nie tak:

  1. <?php
  2. $tablica[$i][$j] = "1";
  3. ?>


a tak:

  1. <?php
  2. $tablica[$i][$j] = 1;
  3. ?>


Tak jest poprawnie, bo wtedy nie jest to traktowane jako string.
Regyam
Darti winksmiley.jpg dzieki za odpowiedz ale po zastosowaniu twojego kodu wywala mi Internal Server Error;p dopiero po jego usunieciu dziala normalnie ;P Sprawdzałeś czy działa by wydaje mi się ze jest wadliwy.
Darti
Sorry, późno było a ja zmęczony ... poniżej masz prawidłowo:

  1. <?php
  2. while ($loop < 15){
  3. $i = rand(1,10);
  4. $j = rand(1,10);
  5. if(!isset($tablica[$i][$j])){
  6. $tablica[$i][$j] = "1";
  7. $loop++;
  8. }  
  9. }
  10. ?>
Regyam
No i nadal internal... ale to chyba przez to ze ja najpierw tworze tablice 10x10 a !isset nam nie podziala bo wszystko jest juz ustawione winksmiley.jpg
swierkdeck
Może przed skryptem Darti'ego zdefiniować $loop=0; ?
Regyam
nie pomaga
b_chmura
a czemu one muszą być losowo?
Darti
aaa nie mówiłeś że już masz tablicę z wartościami i chcesz je zastąpić losowo jedynkami, trzeba więc zrobić tablicę jedynkową i "wkleić" ją do tej wcześniej stworzonej :

  1. <?php
  2. $loop = 0;
  3. while ($loop < 15){
  4. $i = rand(1,10);
  5. $j = rand(1,10);
  6. if(!isset($temp[$i][$j])){
  7. $temp[$i][$j] = 1;
  8. $loop++;
  9. }  
  10. }
  11.  
  12. foreach ($temp as $i => $sub){
  13. foreach ($sub as $j => $v){
  14. $tablica[$i][$j] = $v;
  15. }
  16. }
  17. ?>

ewentualnie sprawdzać, czy w komórce jest jedynka:

  1. <?php
  2. while ($loop < 15){
  3. $i = rand(1,10);
  4. $j = rand(1,10);
  5. if($tablica[$i][$j] != 1){
  6. $tablica[$i][$j] = 1;
  7. $loop++;
  8. }  
  9. }
  10. ?>
Regyam
Cytat(Regyam @ 4.12.2007, 23:51:57 ) *
Mam taki problem, gdy tworze tablice dwuwymiarowa i wypelniam ją zerami....

Napisalem :]
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.