Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowe wyświetlenie z foreach
php11
post 30.11.2015, 23:03:55
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Dobry wieczór,

  1. <?php foreach ($lists as $list) : ?>
  2. <div>
  3. <a rel="nofollow" target="_blank" href="<?php echo 'http://'.$list->link; ?>">
  4. <img src="<?php echo $list->fota; ?>" />
  5. </a>
  6. </div>
  7. <?php endforeach; ?>


W taki sposób wyświetlam listę elementów.
Naprowadzicie, jak wyświetlić losowo (przy odświerzeniu strony) jeden element?

Z góry dziękuję
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post 30.11.2015, 23:12:10
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://php.net/manual/en/function.array-rand.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
php11
post 1.12.2015, 08:37:21
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Bardzo dziekuję, ale nie wiem, co podstawić do $input.
Poniżej nie działa

  1.  
  2. <?php
  3. $input = foreach ($lists as $list);
  4. $rand_keys = array_rand($input, 2);
  5. echo $input[$rand_keys[0]] . "\n";
  6. echo $input[$rand_keys[1]] . "\n";
  7. ?>
Go to the top of the page
+Quote Post
kapslokk
post 1.12.2015, 08:57:49
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Cytat
array
The input array.

num
Specifies how many entries should be picked.


Pierwszy parametr to Twoja tablica, czyli $lists, drugi to ilość elementów które chcesz wyciągnąć.

Zobacz sobie:
  1. var_dump(array_rand($lists,2));
  2. var_dump(array_rand($lists,3));
Go to the top of the page
+Quote Post
php11
post 1.12.2015, 09:03:23
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Dzięki, ale robię jakiś błąd.


  1. <?php
  2.  
  3. $input = $lists;
  4. $rand_keys = array_rand($input, 2);
  5. echo $input[$rand_keys[0]] . "\n";
  6. echo $input[$rand_keys[1]] . "\n";
  7.  
  8. ?>
  9.  
Go to the top of the page
+Quote Post
kapslokk
post 1.12.2015, 09:08:51
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Zrób
  1. var_dump($input[$rand_keys[0]]);
  2. var_dump($input[$rand_keys[1]]);


Wg. Twojego pierwszego postu w tablicy $lists masz obiekty, a próbujesz je wyświetlić przez echo. Włącz sobie wyświetlanie błędów, to pewnie zobaczysz o co chodzi.

Ten post edytował kapslokk 1.12.2015, 09:11:24
Go to the top of the page
+Quote Post
php11
post 1.12.2015, 09:32:42
Post #7





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Twoim kodem wyświetlam:

  1. object(stdClass)#556 (2) { ["fota"]=> string(23) "images/fiat.jpg" ["link"]=> string(12) "http://wp.pl" } object(stdClass)#558 (2) { ["fota"]=> string(22) "images/audi.jpg" ["link"]=> string(12) "http://wp.pl" }


Czyli coś jest, ale nie bardzo rozumiem co :-)
Jak z tego wyswietlić jeden, losowy element?

Bardzo dziekuję
Go to the top of the page
+Quote Post
kapslokk
post 1.12.2015, 10:00:47
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


W pierwszym poście napisałeś:
  1. <?php foreach ($lists as $list) : ?>
  2. <div>
  3. <a rel="nofollow" target="_blank" href="<?php echo 'http://'.$list->link; ?>">
  4. <img src="<?php echo $list->fota; ?>" />
  5. </a>
  6. </div>
  7. <?php endforeach; ?>


$input[$rand_keys[0]] to taki sam obiekt jak $list z powyższego kodu.
Więc musisz zrobić:
echo $input[$rand_keys[0]->link;
echo $input[$rand_keys[0]->fota;
Go to the top of the page
+Quote Post
php11
post 1.12.2015, 10:17:26
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Bardzo dziękuję, działa :-)
ale tylko, gdy losuję 2 elementy: $rand_keys = array_rand($input,2);

Jak zrobię 1 $rand_keys = array_rand($input,1); niestety nie mam wyniku

  1. <?php
  2.  
  3. $input = $lists;
  4. $rand_keys = array_rand($input,2);
  5. // var_dump($input[$rand_keys[0]]);
  6. // var_dump($input[$rand_keys[1]]);
  7. ?>
  8.  
  9. <div>
  10. <a rel="nofollow" target="_blank" href="<?php echo $input[$rand_keys[0]]->link; ?>">
  11. <img src="<?php echo $input[$rand_keys[0]]->fota; ?>" />
  12. </a>
  13. </div>
  14.  


Ten post edytował php11 1.12.2015, 10:20:33
Go to the top of the page
+Quote Post
kapslokk
post 1.12.2015, 10:26:30
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Bo wtedy array_rand nie zwraca Ci tablicy, tylko jeden klucz. Musisz nauczyć się debugować swój kod.
Go to the top of the page
+Quote Post
nospor
post 1.12.2015, 10:30:00
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




oraz czytac dokumentacje, bo tam tez to jesst wyraznie zaznaczone
Cytat
When picking only one entry, array_rand() returns the key for a random entry. Otherwise, an array of keys for the random entries is returned


swoja droga mogli tego nie rozbijac na dwa rozne returny...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
php11
post 1.12.2015, 21:33:13
Post #12





Grupa: Zarejestrowani
Postów: 215
Pomógł: 5
Dołączył: 11.02.2011

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


Bardzo dziękuję za pomoc.

Kod powinien ostatecznie wyglądać tak:

  1. <?php
  2. $input = $lists;
  3. $rand_keys = array_rand($input);
  4. ?>
  5.  
  6. <div>
  7. <a rel="nofollow" target="_blank" href="<?php echo $input[$rand_keys]->link; ?>">
  8. <img src="<?php echo $input[$rand_keys]->fota; ?>" />
  9. </a>
  10. </div>
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:24