![]() |
![]() ![]() |
![]() |
-emzetka- |
![]()
Post
#1
|
Goście ![]() |
Witam. Mam problem ze skryptem losowania. Zrobiłem można powiedzieć "pseudo kod", bo na pewno nie jest to tak jak ma być. Chodzi mi mianowicie o wylosowanie trzech liczb z danego przedziału przy czym żadna z nich nie może być taka sama jak pozostałe. Dane powinny być zamieszczone w tablicy. Mi osobiście udało się to, bo kod działa, jednak nie wiem czemu, ale zależy na jakim serwerze. Na jednym jest wszystko ok, a na innym strona wczytuję się strasznie długo (biały ekran) aż wyświetla się błąd, że za długo musiał oczekiwać w jednej z linii kodu losowania.
Bardzo proszę o podpowiedź jak to powinno wyglądać aby działało szybko i nie sprawiało żadnych problemów ? Oto kod:
Z góry dziękuję za odpowiedzi, pozdrawiam. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
skorzystaj z funkcji rand i array_rand
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Co przyjmuje zmienna $this->numberofr ?
Podstawiłem do tej funkcji liczby 10 cyfrowe i działa ok, wykonanie poniżej sekundy. Jak duże liczby przyjmuje ta zmienna ? gino @toaspzoo rand jest czterokrotnie wolniejsza od mt_rand Ten post edytował gino 31.05.2011, 16:53:09 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
Cytat @toaspzoo rand jest czterokrotnie wolniejsza od mt_rand A array_rand ? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przypomniałem sobie, że mam jednak tutaj użytkownika.
Co przyjmuje zmienna $this->numberofr ? Podstawiłem do tej funkcji liczby 10 cyfrowe i działa ok, wykonanie poniżej sekundy. Jak duże liczby przyjmuje ta zmienna ? Przyjmuje liczbę wierszy pobraną z bazy mysql. Bardzo duża na pewno nie jest, pewnie trochę ponad 100. Pozdrawiam. P.s. Może dodam cały kod pliku (moduł ma za zadnie pobieranie danych z bazy mysql, które zapisał tam komponent DJ Catalog 2)
EDIT. Już wszystko działa, przynajmniej u mnie. Nie wiem jednak dlaczego, ale osoba, której robię ten skrypt mówi, że na Firefoxie dalej mu nie działa (mimo, że u mnie wszystko jest ok na każdej przeglądarce). Co może być tego przyczyną ? Ma ktoś jakiś pomysł ? Ten post edytował Zyggmunt 31.05.2011, 18:02:04 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
powod to jego kłamstwo
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mówi, że gdy włączy przeglądarkę i pierwsze co zrobi to wejdzie na tą stronę z modułem, to nie działa (biały ekran podczas wczytywania, po 80 sek przestaje i ten biały ekran zostaje - nie wyświetla się żaden błąd), jednak gdy wejdzie najpierw na inną podstronę i później wróci do miejsca gdzie jest moduł to działa. Czy to możliwe ? Jeśli tak to jaka może być tego przyczyna ?
Prosiłbym jeszcze o spróbowanie zrobienia tego samego, czyli wyłączyć przeglądarkę, a po włączeniu wejść od razu tutaj: http://oldtimery.com/index.php?option=com_...&Itemid=323. Czy jest w ogóle możliwe żeby coś było nie tak gdy nie ma najmniejszego błędu ? Nawet po użyciu: Kod ini_set( 'display_errors', 'On' ); error_reporting( E_ALL ); Wyślę jeszcze kod szablonu: Kod <?php defined('_JEXEC') or die('Restricted access'); ?> <div id="katalog_module"> <?php for($i=0; $i < 3; $i++) {?> <div class="blocks"> <div class="image"> <?php $image = explode(".", $dane[$i]["image"]); $nazwa_obr = $image[0].'_m.'.$image[1]; $link = $dane[$i]["link"]; echo '<a href="'.$link.'"><img src="http://oldtimery.com/images/djcatalog/'.$nazwa_obr.'" /></a>'; ?> </div> <div class="name"> <?php $name = $dane[$i]["name"]; echo '<a href="'.$link.'"><p>'.$name.'</p></a>'; ?> </div> <div class="category"> <?php $category = $dane[$i]["cat_name"]; echo '<p>('.$category.')</p>'; ?> </div> </div> <?php } ?> </div> Co o tym sądzicie ? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 106 Pomógł: 5 Dołączył: 5.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
http://browsershots.org/http://oldtimery.c...&Itemid=323
Ten post edytował messmaker 2.06.2011, 08:38:02 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem całkowicie skrypt losowania i pojawiają się błędy:
Kod Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /home/oldtimery/domains/oldtimery.com/public_html/modules/mod_katalogfirm/helper.php on line 12 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/oldtimery/domains/oldtimery.com/public_html/modules/mod_katalogfirm/helper.php on line 20 Jednak po odświeżeniu już wszystko działa. Wygląda na to jakby nie łączyło się na początku z bazą i nie pobierało prawidłowo zapytania do zmiennej $result. Moduł oparty jest o Joomla jeśli to coś zmienia. Ten post edytował Zyggmunt 2.06.2011, 11:07:01 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak się nie robi! (IMG:style_emoticons/default/thumbsdownsmileyanim.gif) Co jakbyś miał losować w ten sposób 999'999 różnych liczb spośród 1'000'000? Teoretycznie ta pętla może się wykonywać w nieskończoność (a php ma mało czasu ...). Jasne, że dla podanego przykładu można zastosować inną metodę i wylosować jedną liczbę, którą się odrzuci, ale nie zawsze wiadomo co i z czego będzie losowane ... Spróbuj tak (jeśli wynik może być posortowany, bo jeśli nie może to pokombinujemy dalej ...):
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie problem jest taki, że ja już zmieniłem skrypt losowania na:
Kod function losuj() { $numbers = range(3, $this->numberofr); shuffle($numbers); return array_slice ($numbers,0,3); } I widać zmianę, ponieważ teraz strona się wczytuje, ale pojawiają się błędy takie jak podałem wyżej. Dziwne, że gdy stronę się odświeży, to już działa normalnie. Ten post edytował Zyggmunt 3.06.2011, 08:27:23 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 22:51 |