Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy znacie te uczucie gdy...
daniofantasy
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 14.06.2007
Skąd: Chesterfield UK

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


...gdy 00:00 juz dawno temu minelo, mysli zamiast prowadzic do klarownych rozwiazan slimacza sie we wszystkich kierunkach lepiac sie do siebie nawzajem i nawet budowanie foreacha wymaga zebrania sie w sobie i skupienia uwagi?

... termin oddania projektu za kilka godzin - w poniedzialek rano (IMG:style_emoticons/default/wink.gif) - szczesliwie calosc na finishu, ostatnie kody w phpie, potem jeszcze animowany slider z karuzelka w jquery i calosc bedzie smigac jak ta lala (IMG:style_emoticons/default/biggrin.gif) - tylko czemu koncowki projektow z krotkimi terminami sa zawsze takie ciezkie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Mike: Potrzebowałem losowych X liczb z zakresu 1 do X. Używałbym rand lub mt_rand, gdyby nie fakt, że nie mogą się powtarzać. Zobacz więc co robię z place i powiedz czy da się prościej. Biorę tworzę tablicę jako zakres liczb od 1 do X. Teraz losuję bez powtórzeń (range) i muszę wybrać X losowych spośród nich, więc rusza array_rand. Ale on zwraca klucz lub klucze. Na dodatek jeśli to jeden klucz to zwraca go jako typ jakiego jest ów element, więc wymusza na mnie w foreach rzutowanie na array. A skoro losuje klucze to muszę wartości zamienić z kluczami i stąd array_flip. Tylko tak mam pewność, że wybierze zawsze z zakresu bez powtórzeń. Nie ma wbudowanej funkcji w php, która by losowała X liczb z zakresu zadanego bez powtórzeń. Tego raczej nie da się już prościej zapisać, bo inne metody będą bazować na tym, że losujemy w pętli tak długo, aż nie wylosujemy X i w razie trafienia tej samej, nie branie tego przebiegu pod uwagę. Innymi słowy zamiast jakiejś mogacej się wykonywać długo pętli w stylu
  1. $random_from_range = array();
  2. while( count( $random_from_range ) <= $loops ) {
  3. $temp = $mt_rand( $start_range, $end_range );
  4. if( array_search( $temp, $random_from_range ) == false ) {
  5. $random_from_range[] = $temp;
  6. }
  7. }

zrobiłem jednolinijkowca
  1. $random_from_range = (array) array_rand( array_flip( range( $start_range, $end_range ) ), $loops );
Nie sprawdzałem wydajności, gdyż każdy z nich ma swoje wady i zalety a zastosowanie jest zalezne od sytuacji. Ale ten zapis drugi, choć bardziej zawiły dla laika, na pewno ma ten plus, iż nie ma pustych przebiegów, nawet w przypadku gdy losowanie odbywa się przy liczbie losowanych bliskiej ilości liczb w zakresie. A to jest główna wada pętli, ktora zapewne nieraz wtedy trafi wielokrotnie w tę samą liczbę.

@Mike: Tak, wiem, że pierwszy przykład to nie jedyny z możliwych innych, bo tych można napisać jeszcze wiele bazując na shuffle i array_slice czy shuffle i array_pop dla przykładu (bliższe już wtedy 2 wariantowi). Ale najczęstsze implementacje są jednak bardzo podobne do tego pierwszego własnie. Nie jest to optymalne zawsze, podobnie jak moje w pewnych przypadkach, ale kwestia zawsze jest tego gdzie i jak często stosujemy.
Go to the top of the page
+Quote Post

Posty w temacie
- daniofantasy   Czy znacie te uczucie gdy...   10.10.2011, 02:53:55
- - Calibri   Bo ja wiem. Pamiętam, jak ja miałem oddać pracę z ...   10.10.2011, 06:47:33
- - phpion   A wystarczy umiejętnie rozplanować sobie zadania, ...   10.10.2011, 07:09:03
- - starach   Bo ci się nie chce. Tak jak napisał ~phpion jeśli...   10.10.2011, 07:22:49
- - erix   Scrum, scrum, scrum...   11.10.2011, 14:17:41
- - thek   A czy Ty znasz to uczucie, gdy siadasz do kodu, kt...   12.10.2011, 14:58:09
- - mike   Ja stosuję zasadę, że jeśli kod wymaga komentarzy ...   12.10.2011, 15:25:46
- - kicaj   Cytat(thek @ 12.10.2011, 15:58:09 ) A...   12.10.2011, 17:51:25
|- - mike   Cytat(kicaj @ 12.10.2011, 18:51:25 ) ...   12.10.2011, 19:30:31
- - thek   @Mike: Potrzebowałem losowych X liczb z zakresu 1 ...   13.10.2011, 08:22:25
- - mike   ~thek ale ja nie mówię tym by każda operacja była...   13.10.2011, 08:33:17
- - ixpack   Cytat(mike @ 12.10.2011, 19:30:31 ) T...   13.10.2011, 08:35:37
- - mike   ~thek ten pierwszy przykład równiez można napisać ...   13.10.2011, 08:58:08
- - blooregard   CytatZnów kompletnie brak miejsca na komentarze. J...   13.10.2011, 09:25:03
|- - mike   Cytat(blooregard @ 13.10.2011, 10:25...   13.10.2011, 09:33:15
|- - blooregard   Cytat(mike @ 13.10.2011, 10:33:15 ) N...   13.10.2011, 09:36:17
- - Tho   Oj znamy to uczucie, programowanie to nie praca, t...   13.10.2011, 09:34:37
- - thek   @mike: w przykładzie chodziło mi o to, że nawet po...   13.10.2011, 09:36:02
- - mike   ~thek zgodzę się. Czasem krótko można napisać o al...   13.10.2011, 09:40:40
- - ixpack   $temp - nigdy samego nie używam zawsze tempCo...   13.10.2011, 09:48:40
- - blooregard   CytatA co chciałem do tematu powiedzieć: każdy ma ...   13.10.2011, 09:54:02
- - mike   Skoro tak temat powędrował to ja przy okazji gorąc...   13.10.2011, 09:57:36
- - thek   Wiem, że mało adekwatny nieco, ale posłużę się lin...   13.10.2011, 10:24:28
|- - mike   Cytat(thek @ 13.10.2011, 11:24:28 ) M...   13.10.2011, 10:33:20
- - thek   Gdybym oparł o klasy lub robił specjalnie funkcje,...   13.10.2011, 15:04:06
- - mike   Czyli brniesz w negatywne skutki poprzednich błędn...   13.10.2011, 15:14:09
- - vokiel   thek czy dodanie jednej klasy i kilku metod będzie...   13.10.2011, 15:41:14
- - thek   @mike: jeśli nie naprawiałbym "dziur", t...   14.10.2011, 00:07:31


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: 14.10.2025 - 11:26