Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] x-wygenerowanych zmiennych
tikky
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 2.10.2007

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


Witam,

Wyciągam z bazy ilość rekordów, i np mam: $ile=6;

i teraz dla każdego rekordu muszę mieć stworzoną macierz o nazwie $datax - gdzie x-kolejne numery rekordów.
Czyli dla 6 rekordów powinno być tak:
  1. <?php
  2. $data1 = array();
  3. $data2 = array();
  4. $data3 = array();
  5. $data4 = array();
  6. $data5 = array();
  7. $data6 = array();
  8. ?>

Jak to zrobić najprościej?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Manwe89
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 3
Dołączył: 28.10.2008
Skąd: Łuków

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


wg mnei metoda podwojengo dolara na pewno wywola blad ;d

Dobra mam. Powiedzmy ze pobrales te dane w tablicy i chialbys je miec w zmiennych: $dane1, $dane2,..,$danen.

No wiec w zmiennej i zapisujesz ile elementow pobrales i robimy teraz tak:
  1. <?php
  2. for($j=1;$j<=$i;$j++){
  3.  $tempArray['dane'.$j]=(tutaj przypisz wartosc kolejnym zmiennym dane1, dane2,...);
  4. }
  5.  
  6. extract($tempArray);
  7. ?>


Teraz o funkcji extract (moze Ci sie na przyszlosc przydac):
Definicja funkcji:

extract(array tablica [,typ_ekstrakcji][,string przedrostek])

domyslnym przedrostkiem jest: NULL
domyslnym typem ekstrakcji jest: EXTR_OVERWRITE

Dla czego tak sa ulozone parametry? Logiczne: poniewaz niektore typy ekstrakcji wymagaja przedrostka, o czym za chwile.

wynikiem dzialania funkcji jest wyodrebnienie zmiennych w postaci (w zaleznosci od typu ekstrakcji):
$klucz; lub $przedrostek_klucz

Tak wiec podajac funkcji tablice musisz uwazac aby indeksy nie byly takiem ciagiem, ktory po eksstrakcji utworzylby niepoprawna nazwe zmiennej. Co sie wtedy dzieje? Nie wiem, bo z funkcji tej nie korzystalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Do czego sluzy typ ekstrakcji? Informuje on parser php co ma uczynić jeżeli będzie próba utworzenia zmiennej o takiej nazwie, któej już jest. Np.:
  1. <?php
  2. $imie='Damian';
  3.  
  4. $tablica['imie']='Daniel';
  5. $tablica['nazwisko']='Nowak';
  6.  
  7. extract($tablica);
  8. ?>


Domyslnym typem ekstrakcji jest EXTR_OVERWRITE (czyli nadpisanie zmiennej). Tak wiec wartosc zmiennej imie na koniec kodu bedzie string: "Daniel"
EXTR_SKIP - wrazie kolizji ominięcie (tak wiec w naszym przypadku po zastosowaniu tego typu, wartosc zmiennej wynosilaby: "Damian"
EXTR_PREFIX_SAME - w razie kolizji utworzenie zmiennej w postaci przedrostek_klucz (wymagany wtedy jest parametr przedrostek)
EXTR_PREFIX_ALL - tworzy zmienne (wszystkie!!) w postaci: przedrostek_klucz (co sie dzieje jezeli juz istnieje taka zmienna nie wiem, bo jak wspomnialem nie korzystalem z tej funckji tyle razy aby sie natknac na taki poblem. Podejrzewam ze zostanie nadpisana)
EXTR_PREFIX_INVALID - i tu rozwiazuje sie problem niepoprawnych nazw w kluczach tablic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dodaje przedrostek (ktory musi zostac zdefiniowany!!) przed nazwami zmiennych ktorych nazwy sa niepoprawne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) tak wiec nasza petla 1 moze miec postac:
  1. <?php
  2. for($j=1;$j<=$i;$j++){
  3.   $tempArray[$j]=(tutaj przypisz wartosc kolejnym zmiennym dane1, dane2, dane[b]n[/b]);
  4. }
  5.  
  6. extract($tempArray,EXTR_PREFIX_INVALID,'dane');
  7. ?>

Chociaz moze byc to niewygodne, bo zostana utowrzone zmienne w postaci: dane_1, dane_2....
EXTR_IF_EXISTS - tworzy zmienne tylko i wylacznie wtedy, kiedy istnieje juz taka zmienna, jaka chce utowrzyc i nadpisuja ja.
  1. <?php
  2. $imie='Damian';
  3. $nazwisko='Nowak';
  4.  
  5. $tablica['imie']='Dawid';
  6. $tablica['nazwisko']='Kowalski';
  7. $tablica['miasto']='Gniezno';
  8.  
  9. extract($tablica, EXTR_IF_EXISTS);
  10. ?>

NA koniec otrzymamy zmienne: imie, nazwisko o wartosciach odpowiednio: "Dawid", "Kowalski". Zmienna miasto nie zostanie utworzona, poniewaz nie istniala do tej pory.
EXTR_PREFIX_IF_EXISTS - to samo co EXTR_IF_EXISTS tyle ze dodaje przedrostek (ktory musi byc zdefiniowany!!) zeby nie nadpisac zmiennych istniejacych
EXTR_REFS - wyodrebnia zmienne jako odwolania (dostepna od wersji php 4.3.0)


Mam nadzieje ze o to chodzilo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Manwe89 15.12.2008, 19:03:18
Go to the top of the page
+Quote Post

Posty w temacie


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: 2.01.2026 - 07:52