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 (1 - 9)
SirZooro
post
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


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


Ten post edytował SirZooro 15.12.2008, 14:47:43
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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. ?>
Go to the top of the page
+Quote Post
tikky
post
Post #4





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

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


Nie mogę tworzyć kolejnej macieży. Taki układ jak opisałem jest wymagany przez Open Flash Chart.
Go to the top of the page
+Quote Post
Manwe89
post
Post #5





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

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) wieczorem zajrze to Ci podam nazwę, o ile do tej pory nikt tego nie zrobi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tikky
post
Post #6





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

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


Ok, będę wdzięczny za wszelkie informacje. Choć przyznam, że myślałem, że da się to zrobić w jakis prostszy sposób.
Go to the top of the page
+Quote Post
Manwe89
post
Post #7





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
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
wg mnei metoda podwojengo dolara na pewno wywola blad ;d

I tu się mylisz. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Nie musiałeś całego manuala przepisywać. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Manwe89
post
Post #9





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

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


no powiedzialem ze wg mnie a nie parsera (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
tikky
post
Post #10





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

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


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
Go to the top of the page
+Quote Post

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: 23.08.2025 - 15:12