Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowe wyświetlenie z foreach
Forum PHP.pl > Forum > Przedszkole
php11
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ę
php11
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. ?>
kapslokk
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));
php11
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.  
kapslokk
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.
php11
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ę
kapslokk
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;
php11
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.  
kapslokk
Bo wtedy array_rand nie zwraca Ci tablicy, tylko jeden klucz. Musisz nauczyć się debugować swój kod.
nospor
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...
php11
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>
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.