Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] x-wygenerowanych zmiennych
Forum PHP.pl > Forum > PHP
tikky
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?
SirZooro
Prawdopodobnie zadziała coś takiego (nie sprawdzałem):
  1. <?php
  2. for ($n = 1; $n <= $ile; ++$n)
  3. {
  4.  $nazwa = 'data'.$n;
  5.  $$nazwa = array();
  6. }
  7. ?>
mike
Skoro już piszesz macież to twórz macież:
  1. <?php
  2.  
  3. $data[1] = array();
  4. $data[2] = array();
  5. $data[3] = array();
  6. $data[4] = array();
  7. $data[5] = array();
  8. $data[6] = array();
  9.  
  10. // lub po prostu
  11.  
  12. $data = array();
  13. for ($i = 1; $i <= $ile; $i++) {
  14.    $data[$i] = array();
  15. }
  16.  
  17. ?>
tikky
Nie mogę tworzyć kolejnej macieży. Taki układ jak opisałem jest wymagany przez Open Flash Chart.
Manwe89
Jest taka funkcja ktora z
  1. <?php
  2. $tab['1'];
  3. $tab['2'];
  4. $tab['3'];
  5. ?>


utworzy: $nazwa_zmiennej[ktora sie deklaruje](seprator[ktory chyba da sie definiowac])indeks, czyli mowiac na polski:
$tablica1. $tablica2.

Musialbys wiec pusic to przez petle zeby stowrzyc tablcie ponumerowana ['1'],['2'], a potem poddac to dzialaniu tej funkci smile.gif wieczorem zajrze to Ci podam nazwę, o ile do tej pory nikt tego nie zrobi smile.gif
tikky
Ok, będę wdzięczny za wszelkie informacje. Choć przyznam, że myślałem, że da się to zrobić w jakis prostszy sposób.
Manwe89
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 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 smile.gif Dodaje przedrostek (ktory musi zostac zdefiniowany!!) przed nazwami zmiennych ktorych nazwy sa niepoprawne 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 smile.gif
erix
Cytat
wg mnei metoda podwojengo dolara na pewno wywola blad ;d

I tu się mylisz. winksmiley.jpg

Nie musiałeś całego manuala przepisywać. tongue.gif
Manwe89
no powiedzialem ze wg mnie a nie parsera biggrin.gif
tikky
Metoda podwójnego dolara działa i wydaje się najprostszym rozwiązaniem mojego problemu.

Tymniemniej dziekuję wszystkim za poświęcony czas oraz okazaną pomoc. Z pewnośią niektórych porad użyję w przyszłości.

Pozdrawiam,

Piotr Fuz
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.