Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] rand a tablica
Regyam
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.04.2007

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

Ostrzeżenie: (0%)
-----


  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. ?>


Ten post edytował Darti 5.12.2007, 00:47:13
Go to the top of the page
+Quote Post
strife
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Regyam
post
Post #4





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.04.2007

Ostrzeżenie: (0%)
-----


Darti (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Darti
post
Post #5





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Regyam
post
Post #6





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.04.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Regyam 5.12.2007, 17:59:20
Go to the top of the page
+Quote Post
-swierkdeck-
post
Post #7





Goście







Może przed skryptem Darti'ego zdefiniować $loop=0; ?
Go to the top of the page
+Quote Post
Regyam
post
Post #8





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.04.2007

Ostrzeżenie: (0%)
-----


nie pomaga
Go to the top of the page
+Quote Post
b_chmura
post
Post #9





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


a czemu one muszą być losowo?
Go to the top of the page
+Quote Post
Darti
post
Post #10





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował Darti 5.12.2007, 21:46:30
Go to the top of the page
+Quote Post
Regyam
post
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.04.2007

Ostrzeżenie: (0%)
-----


Cytat(Regyam @ 4.12.2007, 23:51:57 ) *
Mam taki problem, gdy tworze tablice dwuwymiarowa i wypelniam ją zerami....

Napisalem :]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 06:29