Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] losowanie
Forum PHP.pl > Forum > Przedszkole
jawka7
mam taki problem, chce zeby mi wyswietlilo zmienne w losowej kolejnosci. np. mam 10 zmiennych o roznych nazwach i chce zeby mi wyswietlilo wszystkie w losowej kolejnosci ale tak zeby sie nie powtarzaly. z tym ze one beda umieszczone wczesniej w tablicy i nie bede znal ich nazwy bo jeszcze wczesniej przed wstawieniem danej zmiennej do tablicy tez beda losowane ktora ze zmiennych ma sie tam znajdowac.
nospor
Cytat
z tym ze one beda umieszczone wczesniej w tablicy i nie bede znal ich nazwy

Manual nie gryzie:
wejdź do manuala, dział tablice i przejrzyj sobie co tam jest. Nazywa się to bodajże array_rand, ale glowy nie dam.

ps: przenosze
CrazyProgrammer
Pewnie chodzi o coś takiego....
Kod
<?php
$tablica_do_losowania = array("1", "2", "3", "4", "5","6","7","8","9","10");

function ReallyRandomArray($input){
srand((float) microtime() * 10000000);
$rand_keys = array_rand($input, count($input));
$res = array();
if(count($input) > 1){
for($a=0;$a<count($input);$a++){
    $res[] = $input[$rand_keys[$a]];
} }
else{
     $res[] = $input[$rand_keys];    
    }
return $res;
}

// odwołanie
$a = ReallyRandomArray($tablica_do_losowania);

// sprawdzenie
echo "<pre>";
print_r($a);
echo "</pre>";
?>
marcio
Sorki a czy tak nie jest krocej i szybciej??

  1. <?php
  2. $liczby = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
  3. shuffle($liczby);
  4. $ile_liczb = count($liczby);
  5.  
  6. for($tab = 0; $tab <= $ile_liczb; $tab++) {
  7.  
  8. echo($liczby[$tab]);
  9. }
  10. ?>


---------------------------------------------EDIT--------------------------------------------

Zeby nie bylo ze nie dziala albo cos oto wynik na localhoscie:
Cytat
3670281549
CrazyProgrammer
Cytat(marcio @ 4.01.2008, 11:43:23 ) *
Sorki a czy tak nie jest krocej i szybciej??


Nie chodzi o to żeby było krócej, ale o to żeby była większa 'niepowtarzalność' wygenerowanych wyników
Jak wiadomo samo rand,shuffle etc. niezbyt dobrze sobie z tym radzi.


oto wyniki 5 losowań mojej propozycji - zwrócone jako Array() a nie String
Kod
Array
(
    [0] => 10
    [1] => 2
    [2] => 7
    [3] => 6
    [4] => 8
    [5] => 4
    [6] => 9
    [7] => 1
    [8] => 3
    [9] => 5
)

Array
(
    [0] => 9
    [1] => 4
    [2] => 2
    [3] => 7
    [4] => 8
    [5] => 6
    [6] => 5
    [7] => 3
    [8] => 10
    [9] => 1
)

Array
(
    [0] => 4
    [1] => 8
    [2] => 7
    [3] => 10
    [4] => 6
    [5] => 1
    [6] => 3
    [7] => 2
    [8] => 9
    [9] => 5
)

Array
(
    [0] => 8
    [1] => 6
    [2] => 2
    [3] => 5
    [4] => 10
    [5] => 1
    [6] => 4
    [7] => 9
    [8] => 7
    [9] => 3
)

Array
(
    [0] => 5
    [1] => 2
    [2] => 8
    [3] => 10
    [4] => 9
    [5] => 6
    [6] => 4
    [7] => 7
    [8] => 3
    [9] => 1
)
marcio
NO i nie rozumiem w czym problem?
CrazyProgrammer
Cytat(marcio @ 4.01.2008, 14:05:59 ) *
NO i nie rozumiem w czym problem?


Na mój gust to obydwa skrypty są dobre biggrin.gif

Mój zwraca ARRAY, a Twój String, w zależności do czego autor postu bedzie potrzebował skryptu
to ma gotowe rozwiązanie w 2 wersjach biggrin.gif

Pozdrawiam
marcio
No masz racje w sumie autor nie napisal jaki chce wynik ;p
JaRoPHP
Cytat(CrazyProgrammer @ 4.01.2008, 14:11:27 ) *
Mój zwraca ARRAY, a Twój String
@CrazyProgrammer od kiedy funkcja shuffle" title="Zobacz w manualu PHP" target="_manual zwraca tablicę stringa?
  1. <?php
  2. $liczby = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
  3. shuffle($liczby);
  4. echo '<pre>';
  5. var_dump($liczby);
  6. echo '</pre>';
  7. ?>

Cytat
array(10) {
[0]=>
string(1) "6"
[1]=>
string(1) "7"
[2]=>
string(1) "5"
[3]=>
string(1) "2"
[4]=>
string(1) "1"
[5]=>
string(1) "3"
[6]=>
string(1) "9"
[7]=>
string(1) "0"
[8]=>
string(1) "8"
[9]=>
string(1) "4"
}

Cytat(CrazyProgrammer @ 4.01.2008, 14:11:27 ) *
Na mój gust to obydwa skrypty są dobre biggrin.gif
Po co wymyślać koło na nowo?

-- EDIT
Shuffle - wynik jest oczywiście tablicą...
Shuffle przypisuje nowe klucze - nie zwraca owej wartości.
marcio
@JaroPHP,crazyprogrammer wlasnie napisal ze shuffle zwraca string a nie tablice smile.gif
CrazyProgrammer
Cytat(JaRoPHP @ 5.01.2008, 13:02:11 ) *
@CrazyProgrammer od kiedy funkcja shuffle" title="Zobacz w manualu PHP" target="_manual zwraca tablicę.


Napisałem dokładnie odwrotnie,
na dodatek w mojej funkcji nie użyłem shuffle
tylko srand i array_rand tak więc moja funkcja zwraca ARRAY(); co jest zgodne z prawdą!
Natomiast kod @marcio używa funkcji shuffle i zwraca String - co też napisałem!

Wkleił Pan przykład kodu od @marcio i pokazał wyniki działania mojego skryptu.
Proszę dokładniej czytać posty.

Pozdrawiam
JaRoPHP
@CrazyProgrammer - czytam posty dokładnie. Lecz w trakcie pisania wkradł się błąd. Otóż shuffle nie zwraca ani Stringa, ani Array-a (stąd ów błąd), tylko miesza klucze w tablicy, która jest argumentem. Ale wynikiem działania shuffle jest tablica (array), nie łańcuch (string).

Cytat
tak więc moja funkcja zwraca ARRAY(); co jest zgodne z prawdą!
Ani razu nie podałem tego wątpliwości.

Cytat
Natomiast kod @marcio używa funkcji shuffle i zwraca String - co też napisałem!
Tak napisałeś, ale tutaj @CrazyProgrammer jesteś w błędzie.

Cytat
Wkleił Pan przykład kodu od @marcio i pokazał wyniki działania mojego skryptu.
Nic z tych rzeczy. Wynik przedstawiony w moim poście odnosi się do kodu, który również jest tam przedstawiony. Proponuje na przyszłość sprawdzać kod smile.gif.

Natomiast dlaczego @marcio ma Stringa - bo drukuje elementy (pętla for" title="Zobacz w manualu PHP" target="_manual i echo" title="Zobacz w manualu PHP" target="_manual), nic więcej.
CrazyProgrammer
Nie chodzi w moim stwierdzeniu o to w jakiej postaci zwraca funkcja shuffle, lecz
'mówiąc' funkcja mam na myśli wynik końcowy kodu php i w jakiej postaci zwraca dane.
Nie na miejscu jest łapanie za słówka.

Cytat
Otóż shuffle nie zwraca ani Stringa, ani Array-a (stąd ów błąd), tylko miesza klucze w tablicy, która jest argumentem. Ale wynikiem działania shuffle jest tablica (array), nie łańcuch (string).

Ani razu nie podałem tego wątpliwości.

Tak napisałeś, ale tutaj @CrazyProgrammer jesteś w błędzie.


Nie jestem w błędzie - napisałem
Cytat
Natomiast kod @marcio używa funkcji shuffle i zwraca String


nie napisałem funkcja shuffle tylko kod - a to jest różnica !

Cytat
Nic z tych rzeczy. Wynik przedstawiony w moim poście odnosi się do kodu, który również jest tam przedstawiony. Proponuje na przyszłość sprawdzać kod smile.gif.

Nie zgadzam się z Tobą wynik @marcio to 3670281549
a ten długi jest mój - wiem przecież doskonale,bo sam dałem te wyniki z mojego skryptu.
Zobacz co pisze nad tymi wynikami.
cyt. oto wyniki 5 losowań mojej propozycji - zwrócone jako Array() a nie String i podpisane CrazyProgrammer

Cytat
Natomiast dlaczego @marcio ma Stringa - bo drukuje elementy (pętla for" title="Zobacz w manualu PHP" target="_manual i echo" title="Zobacz w manualu PHP" target="_manual), nic więcej.


Przecież mówię,że chodzi o to co zwraca cały skrypt/kod a nie konkretna funkcja.
Nie wiem dlaczego tak się uczepiłeś. Nie analizujemy tu konkretnej funkcji PHP tylko całość kodu.


Niech lepiej Internauci ocenią kto ma rację biggrin.gif

Zresztą po co sie nawzajem czepiać, skoro problem z tematu postu został rozwiązany.

Pozdrawiam
JaRoPHP
Cytat(CrazyProgrammer @ 5.01.2008, 23:14:01 ) *
Nie chodzi w moim stwierdzeniu o to w jakiej postaci zwraca funkcja shuffle, lecz
'mówiąc' funkcja mam na myśli wynik końcowy kodu php i w jakiej postaci zwraca dane.
Nie na miejscu jest łapanie za słówka.
Jeżeli uraziłem - sorry. Nie chcę "łapać za słówka", lecz wyprowadzać z błędu.
Piszesz, że masz na myśli całościowy kod - w takim razie, obydwa zwracają Stringa - Ty używasz print_r" title="Zobacz w manualu PHP" target="_manual, @marcio echo" title="Zobacz w manualu PHP" target="_manual.
Racja, Ty napisałeś funkcję, która zwraca Array, lecz @marcio użył funkcji shuffle" title="Zobacz w manualu PHP" target="_manual, której wynikiem jest również Array.

Cytat(CrazyProgrammer @ 5.01.2008, 23:14:01 ) *
Przecież mówię,że chodzi o to co zwraca cały skrypt/kod a nie konkretna funkcja.
Nie wiem dlaczego tak się uczepiłeś. Nie analizujemy tu konkretnej funkcji PHP tylko całość kodu.
Jak pokazałem powyżej - nijak ma się to do Twojego kodu, który w efekcie drukuje tablicę (więc na końcu jest String).

Cytat
Cytat
Nic z tych rzeczy. Wynik przedstawiony w moim poście odnosi się do kodu, który również jest tam przedstawiony. Proponuje na przyszłość sprawdzać kod smile.gif.

Nie zgadzam się z Tobą wynik @marcio to 3670281549
a ten długi jest mój - wiem przecież doskonale,bo sam dałem te wyniki z mojego skryptu.
Napisałem, że wynik w moim poście odnosi się do kodu, który jest w moim poście - nie rozumiem, czemu twierdzisz, że użyłem kodu @marcio, a dałem Twój wynik.
Mój kod jest podobny do kodu @marcio, ale inny - dlatego wynik jest taki jak Twój (ale nie Twój).

Cytat
Zresztą po co sie nawzajem czepiać, skoro problem z tematu postu został rozwiązany.
Z tym sie zgadzam, ale nie jest moim celem "czepianie się". Nie chcę, aby ktoś przeczytał ów wątek i stwierdził, że shuffle" title="Zobacz w manualu PHP" target="_manual zwraca Stringa.
CrazyProgrammer
Ok, postaram się wklejać bardziej opisowe komentarze wewnątrz kodu,
żeby uniknąć nieścisłości by było wiadomo do czego wykorzystujemy daną funkcja php
w danej linii kodu, czasem bowiem potrzebne jest przekształcenie/zagnieżdżenie
funkcji w taki sposób, aby zwróciła wyniki w zupełnie odmienny sposób - niż ten z manuala PHP.
i stąd te nieścisłości.

Skrypty specjalnie piszę 'jakby na około - lecz zgodne z logiką', ale chodzi mi o to,
aby początkujący programista mógł sam przeanalizować kod [ skrypt ],
i proszę sobie wyobrazić jaki będzie szczęśliwy,gdy zrozumie zasadę działania takiego
mechanizmu, i sam będzie w stanie udoskonalić swój kod - a nawet napisać lepszy.
Nie chodzi przeciez żeby podkładać 'gotowce', lecz żeby czegoś nauczyć.
Myślę,że pomoże to początkującym zrozumienie teorii w praktyce,
która bywa czasem zupełnie inna niz teoria...

Pozdrawiam
CrazyProgrammer
marcio
Zgadzam sie z przedmowca teoria != praktyka
JaRoPHP
Cytat(CrazyProgrammer @ 6.01.2008, 17:41:37 ) *
Ok, postaram się wklejać bardziej opisowe komentarze wewnątrz kodu,
żeby uniknąć nieścisłości by było wiadomo do czego wykorzystujemy daną funkcja php
w danej linii kodu, czasem bowiem potrzebne jest przekształcenie/zagnieżdżenie
funkcji w taki sposób, aby zwróciła wyniki w zupełnie odmienny sposób - niż ten z manuala PHP.
i stąd te nieścisłości.

Skrypty specjalnie piszę 'jakby na około - lecz zgodne z logiką', ale chodzi mi o to,
aby początkujący programista mógł sam przeanalizować kod [ skrypt ],
i proszę sobie wyobrazić jaki będzie szczęśliwy,gdy zrozumie zasadę działania takiego
mechanizmu, i sam będzie w stanie udoskonalić swój kod - a nawet napisać lepszy.
Nie chodzi przeciez żeby podkładać 'gotowce', lecz żeby czegoś nauczyć.
Myślę,że pomoże to początkującym zrozumienie teorii w praktyce,
która bywa czasem zupełnie inna niz teoria...

Pozdrawiam
CrazyProgrammer

@CrazyProgrammer kilka kwestii, aby nie było nieporozumień:
- nie mam zamiaru nikomu dogryzać, tylko staram się wyjaśniać niejasności - a takowe (przynajmniej z mojego punktu widzenia) sie pojawiły,
- pisanie gotowców - jestem zdecydowanym przeciwnikiem takiego rozwiązania. Dodatkowo - nic w owym wątku nie napisałem, tylko dopisałem fragment do kodu już napisanego, aby było widoczne, jaki typ ma zmienna. Jednak staram się, jak już piszę - jest to dużo gorsze rozwiązanie od gotowca ("nauczonej głupoty trudno się pozbyć" mawiał jeden z moich nauczycieli. Trudno się z Nim nie zgodzić).
- teoria bywa inna niż praktyka... Trudno mi się zgodzić. Dobrze zrozumiana teoria naprawdę pomaga smile.gif.
CrazyProgrammer
Cytat(JaRoPHP @ 6.01.2008, 18:16:08 ) *
- teoria bywa inna niż praktyka... Trudno mi się zgodzić. Dobrze zrozumiana teoria naprawdę pomaga smile.gif.


Dobrze zrozumiana teoria naprawdę pomaga - Tak, nam znających perfekcyjnie manula i funkcje w php ,
i siedzących w tym od dawna,bo potrafimy wyodrębnić z niej [teorii] interesujące nas informacje.
Lecz dla kogoś kto stawia pierwsze kroki w PHP nawet teoretycznie proste do wykonania skrypty - spędzają czasami w praktyce sen z powiek młodemu programiście


------------ edit ----------------------
A chcąc udowodnić że mam rację z tym 'Mój zwraca ARRAY, a Twój String', chodzi o to:
Kod
<?php
$tablica_do_losowania = array("1", "2", "3", "4", "5","6","7","8","9","10");



function ReallyRandomArray($input)
{srand((float) microtime() * 10000000);
$rand_keys = array_rand($input, count($input));
$res = array();
if(count($input) > 1){
    for($a=0;$a<count($input);$a++)
    {    $res[] = $input[$rand_keys[$a]];
        // pętla for przypisuje tutaj element do tablicy
        // tablica[element] = liczba_do_losowania[$a]
                } }
    else{     $res[] = $input[$rand_keys];
                  }return $res;
                // funkcja ReallyRandomArray(); zwraca Array
                }



function marcio($liczby){
    shuffle($liczby);
    $ile_liczb = count($liczby);
    for($tab = 0; $tab <= $ile_liczb; $tab++)
        {
        //echo($liczby[$tab]);
        // echo zamieniamy na $wynik  -  funkcja marcio(); zwraca String
        $wynik .= ($liczby[$tab]);
        // gdyby zamienić na $wynik[] = $liczby[$tab];
        // wtedy funkcja marcio); zwróci Array
        }
        return $wynik; // funkcja marcio(); zwraca String
}

//++++++ SPRAWDZENIE +++++++//
echo "Crazyprogrammer  ReallyRandomArray(); - is Array?: ".is_array(ReallyRandomArray($tablica_do_losowania));
echo"<pre>";
print_r(ReallyRandomArray($tablica_do_losowania));// print_r wyświetla tablice
echo "</pre>";
echo "<br>";
echo "marcio - marcio(); - is String?: ".is_string(marcio($tablica_do_losowania));
echo"<pre>";
print_r(marcio($tablica_do_losowania));    // print_r wyświetla string
echo "</pre>";
?>


Po 'odpaleniu' powyższegu przykładu na serwerze, staje się jasne że miałem rację,

Cytuję:
Cytat(JaroPHP)
Piszesz, że masz na myśli całościowy kod - w takim razie, obydwa zwracają Stringa - Ty używasz print_r, @marcio echo.
Racja, Ty napisałeś funkcję, która zwraca Array, lecz @marcio użył funkcji shuffle, której wynikiem jest również Array.


W powyższym przykładzie wyniki funkcji ReallyRandomArray(); oraz marcio(); są wyświetlane za pomocą print_r,
U mnie [ funkcja ReallyRandomArray(); ] wynikiem jest Array a u @marcio String - zgodnie z założeniem.
Funkcja print_r została użyta jedynie ,aby tylko wyświetlić wartości wyrażenia.
dodatkowo w kodzie użyto is_string(); oraz is_array(); by potwierdzić moją rację. smile.gif

Cytat(JaroPHP)
Cytat(crazyprogrammer)
Cytat Natomiast kod @marcio używa funkcji shuffle i zwraca String - co też napisałem!

Tak napisałeś, ale tutaj @CrazyProgrammer jesteś w błędzie.

Nie jestem w błędzie - wyjaśniam STEP BY STEP

Natomiast kod @marcio używa funkcji shuffle i zwraca String - co też napisałem!
Inaczej mówiąc: Skrypt @marcio tylko używa funkcji shuffle, a efektem końcowym [skryptu/kodu, a nie funkcji shuffle! ] jest wynik w postaci String i to miałem na myśli - ale można różnie zinterpretować tekst, dziwne bo przecież pisze wyraźnie cyt. Natomiast kod @marcio używa funkcji ...

A po co wymyślać koło na nowo ?
Żeby pokazać że można rozwiązać zagadnienie na wiele sposobów.

Pozdrawiam

offtopic.gif



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