![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie,
Mam za zadanie napisac funkcje, ktora bedzie losowo tasowac wartosci w tablicy asocjacyjnej, nie zmieniajac nazw kluczy. Zrobilam sobie na samym poczatku krotka tablice i krotki kod: <?php $tablica = array("1a" => "x" , '1b'=>"y", "1c" =>'z' ); shuffle($tablica); foreach ($tablica as $key => $value) { if ($key==0){ $key="1a"; } if ($key==1){ $key="1b"; } if ($key==2){ $key="1c"; } php?> Czytalam duzo o sortowaniu i tasowaniu i wyczytalam ze funkcja shuffle owszem przetasuje mi wartosci w tablicy, lecz rowniez zmieni mi nazwy kluczy na liczbowe, a tego nie chce ( w chwili obecnej klucz 1a=0, 1b=1 i 1c=2. Chcialam ponownie zmienic te nazwy kluczy i przypisac im pierwotnie nadane nazwy, lecz nie udaje mi sie bo widnieja mi teraz nazwy takie : 01a,11b i 12c. Interesuje mnie przetasowanie tylko i wylacznei wartosci przypisanych do danych kluczy w tablicy. Nie wiem w jakim kierunku moglabym juz pojsc i jak rozwiazac to zadanie. Czy ktos moze mnie chociaz naprowadzic? Pozdrawiam! Ten post edytował dolar 3.11.2016, 12:34:41 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm faktycznie dziala, lecz nie rozumiem tego kompletnie ;p Przeciez array_values indeksuje tablice liczbowo to przed przetasowaniem mimo wszystko nie zmienil kluczy z 1a na 0 itd? Czy ktos moglby mi to wytlumaczyc i dalczego moj tok myslenia byl bledny? Pozdrawiam
Ten post edytował dolar 3.11.2016, 13:24:45 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
array_values pobiera same wartości, shuffle tasuje je, potem pobieranie array_keys samych kluczy z oryginalnej tablicy i połączenie obu tablic (kluczy i wartości przetasoowanych)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Hm rozumiem! Tylko mam jeszcze jedno pytanie: na stronie php.net ( tutaj dokaldniej: http://php.net/manual/pl/function.array-values.php ) jest napisane ze funkcja indeksuje tablice na nowo liczbowo. Nie wiem czy nie myle pojec, ale czy zaindeksowanie na nowo nie spowoduje ze moj klucz pierwotny 1a nie dostanie nowego klucza 0? Czy klucze i indeks to to samo? Bo chyba sie pogubilam... :/. Bo skoro zamienia klucze moje na liczby to jakim cudem pozniej przy laczeniu kluczy z wartosciami zwracane mam oryginalne klucze? Pozdrawiam!
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dobrze rozumiesz ale ten problem rozwiązuje array_combine().
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
No ok, a to nie dziala tak ze jak juz zrobie array_values to w tym momencie moja tablica dostaje nowe klucze ( tutaj liczbowe ) i tamte juz nie istanieja, zostaja zastapione nowymi? Bo ja rozumiem to tak, ze najpierw wyciaga wartosci i nadaje nowe klucze, potem tasuje wyciagniete wartosci i na koncu laczy. Skad funkcja laczaca wie ze ma wziasc klucze oryginalne a nie te nadpisane? Sorki za takie postawy ale musze wszystko dobrze rozumiec
![]() Acha i na stronie funkcja shuffle ma taki wyglad: http://php.net/manual/pl/function.shuffle.php . Moge nia tasowac tylko same wartosci wraz z przypisanymi do niej kluczami? I ostatania sprawa - ja uzywam echo do wyswietlania, a czemy Wy uzywacie print_r? ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Skrypt który napisał pyton:
1. Do zmiennej $values przypisuje wartości $tablica ($tablica jest nieruszona) 2. Miesza tablicę $values ($tablica jest nieruszona) 3. Do zmiennej $tablica nadpisuje dane poprzez łączenie kluczy tablicy $tablica z pomieszanymi wartościami $values. Przypisywanie zmiennych idzie od prawej do lewej. ($tablica zostaje nadpisana wynikiem array_combine() który z kolei łączy klucze oryginalnej $tablica i pomieszanych wartości które są w zmiennej $values() P.S. shuffle() za parametr przyjmuje referencje, to znaczy że nie musisz pisać $values = shuffle($values), gdy do funkcji leci referencja to właśnie ta zmienna będzie zedytowana (w sumie to nieistotne ale poczytaj o referencjach i o tym co pisałem, czyli o wartościach zmiennych od prawej do lewej). print_r() wyświetla tablicę w formacie human readable, w konsoli wyświetli ładnie ułożoną strukturę, z kolei w HTML musisz print_r() wziąć w tagi HTML <pre></pre>
Ten post edytował Puszy 3.11.2016, 15:48:52 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Ooo bardzo dziekuje za odpowiedzi! To moge jeszcze troche pomeczyc?
![]() ![]() 1. Ok rozumiem, ja bym powiedziala ze w tym punkcie do $values zostaja przypisane wartosci z $tablicy, ale do ZMIENNEJ, a tutaj chyba wynika z tego ze $values to tworzy sie nowa tablica jakby? Do tej pory powielalam tablice w taki sposob np. $tablica1=$tablica2, czyli cala istniejaca gdzies wczesniej tablica2 zostaje skopiowana jakby i przypisana do $tablica1. Cala. Z tego wynika ze moge stworzyc tablice przypisujac jej same wartosci? Myslalam ze przypisujac do $values wyciagniete wartosci da mi to zmienna pelna samych wartosci ;p. 2.Ok miesza... tlyko ze ja wlasnie bylam uczona ze shuffle zapisuje sie tak np: $tablica=shuffle($tablica); czy tutaj moglabym uzyc zamiennie $values=shuffle($values)? Bo z tym dluzszym kodem juz mi nie chce dzialac... 3.O dziwo rozumiem ![]() Jeszcze raz dzieki za cierpliwosc ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
1. Zapis: $values = array_values($tablica); Utworzona zostaje nowa zmienna o nazwie $values do której jest przypisywany wynik funkcji array_values(), funkcja array_values() bierze za argument tablicę (nie modyfikuje jej) i zwraca tablicę wartości.
2. Funkcja shuffle() przyjmuje za argument referencje i nie zwraca nic, dlatego $zmienna w zapisie $zmienna = shuffle($tablica) zawsze będzie pusta, bo shuffle nie zwraca żadnej wartości ale modyfikuje przekazany jej argument, przekazywanie referencji oznacza się poprzez ampersand (&) np:
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Stal sie cud! ROZUMIEM! Dzieki wielkie, jeszcze nie raz bede tu pisac i zagladac
![]() Ten post edytował dolar 3.11.2016, 16:50:17 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
@Puszy nie pisz głupot że nic nie zwraca i zmienna będzie pusta:
Cytat Returns TRUE on success or FALSE on failure. http://php.net/manual/en/function.shuffle....le-returnvalues @dolar czytaj opis funkcji w manualu. Tam masz opisane co robi, jak robi, co dostaje, co zwraca. Ba nawet przykłady które kopiuj/wklej sobie odpalasz i widzisz. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 92 Pomógł: 0 Dołączył: 19.10.2016 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie! Kazdy detal sie liczy. Wybaczcie za moje podstawy i pewnie błahe pytania ale od czegos trzeba zaczac.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 21:09 |