Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problemy z funkcjami i tablicami
Forum PHP.pl > Forum > Przedszkole
The Night Shadow
Mam funkcję taką:

  1. <?php
  2. function option($rodzaj_opcji, $nazwa_opcji, $zmienna_opcji, $tresci_opcji)
  3. {
  4. }
  5. ?>


Zmienna $opcje przyjmuje za swą wartość tablicę:

  1. <?php
  2. $opcje = array(
  3. 1 => 'loginu',
  4. 2 => 'adresu e-mail',
  5. 3 => 'numeru Gadu-Gadu',
  6. 4 => 'nicku Tlen',
  7. 5 => 'rangi',
  8. 6 => 'statusu',
  9. 7 => 'daty założenia/aktywacji konta',
  10. 8 => 'daty ostatniego logowania',
  11. 9 => 'adresu IP',
  12. );
  13. ?>


Dlaczego jeśli za $tresci_opcji w wywoływaniu funkcji wpiszę:

  1. <?php
  2. $opcje
  3. ?>


Nie działa pętla wewnątrz funkcji wyglądająca tak:

  1. <?php
  2. $zwroc .= '<select name="'.$nazwa_opcji.'">';
  3. $i=1;
  4. foreach($tresci_opcji as $nazwa)
  5. {
  6. $zwroc .= '<option "'; 
  7. if ($zmienna_opcji==$nazwa['$i']) 
  8. { 
  9. $zwroc .= 'selected="selected"'; 
  10. } 
  11. $zwroc .= '>"'.$nazwa['$i'].'"</option>';
  12. $i++;
  13. }
  14. $zwroc .= '</select>';
  15. return $zwroc;
  16. ?>


?
Kuziu
Wewnątrz foreach zmiennej $nazwa powinieneś używać już bez kluczy/indexów przecież forach wyciąga jedną wartość z danej komórki tablicy i przypisuje ją do zmiennej która w tym wypadku jest tekstową więc $nazwa nie jest tablicą.

Linia 11
  1. <?php
  2. $zwroc .= '>"' . $nazwa . '"</option>';
  3. ?>


W 7 masz ten sam błąd.

Dodatkowo nawet gdyby to była tablica to przecież zmienne w apostrofach nie są parsowane więc $nazwa['$i'] nie da żadanego efektu a jedynie $nazwa[$i];

Pozdrawiam
The Night Shadow
No dobra foreach przypisuje jedną wartość, a co z tablicą typu (chodzi o wykorzystywanie w pętli w jednym miejscu nazwy, a w drugim daty itd.:

zmienna 1 - nazwa data info
zmienna 2 - nazwa data info

Jak mam ją wykorzystać w pętli?

Poza tym jak to $nazwa niejest tablicą skoro tej zmiennej jest przypisana tablica?
Kuziu
$nazwa to nie tablica bo jest jej przypisana 1 komórka tablicy w Twoim wypadki zmienna tekstowa. Gdybyś miał tablicę w tablicy to tak a tutaj masz tablicę stringów i foreach wyciąga Ci kolejne elementy tej tablicy czyli stringi.
The Night Shadow
  1. <?php
  2. function option($rodzaj_opcji, $nazwa_opcji, $zmienna_opcji, $tresci_opcji)       
  3.     {
  4.         if ($rodzaj==1)
  5.         {
  6.             $zwroc .= '<select name="'.$nazwa_opcji.'">';
  7.             foreach($tresci_opcji as $nazwa)
  8.             {
  9.                 $zwroc .= '<option "'; 
  10.                 if ($zmienna_opcji==$nazwa) 
  11.                 { 
  12.                     $zwroc .= 'selected="selected"'; 
  13.                 } 
  14.                 $zwroc .= '>"'.$nazwa.'"</option>';
  15.             }
  16.             $zwroc .= '</select>';
  17.             return $zwroc;
  18.         }
  19.     }
  20. ?>


Zrobiłem tak i to:

  1. <?php
  2. option('1', 'wedlug', $sortowane_wedlug, $opcje);
  3. ?>


nie działa... dlaczego?

Wcześniej jest to:

  1. <?php
  2. $opcje = array(
  3. 1 => 'loginu',
  4. 2 => 'adresu e-mail',
  5. 3 => 'numeru Gadu-Gadu',
  6. 4 => 'nicku Tlen',
  7. 5 => 'rangi',
  8. 6 => 'statusu',
  9. 7 => 'daty założenia/aktywacji konta',
  10. 8 => 'daty ostatniego logowania',
  11. 9 => 'adresu IP',
  12. );
  13. ?>


I pytanie podpięte... czyli gdyby do 1 podpiąć kolejną tablicę wtedy kluczeindexy były by potrzebne i w jaki sposób należałoby je zaznaczać?

Zmienna $sortowanie_wedlug przyjmuje domyślnie wartość 'login' (z pewnością ni jest pusta)
Kuziu
Używasz czasem echo do wyszukiwania błędów ?

Po 1 wstaw sobie echo('a'); po 5 linii ... co zauważysz ... nic więc:
  1. <?php
  2. if ($rodzaj==1)
  3. ?>

Nie działa

Wtedy się zastanawiasz dlaczego i patrzysz że jako parametr wchodzi $rodzaj_opcji i już znasz odpowiedź.

Teraz wszedzie wchodzi dobrze...ale nadal nic nie widać dlaczego ?

Bo masz return $zwroc a nie echo więc albo echo($zwroc) albo

  1. <?php
  2. echo(option('1', 'wedlug', $sortowane_wedlug, $opcje));
  3. ?>
The Night Shadow
Tak:

  1. <?php
  2. echo(option('1', 'wedlug', $sortowane_wedlug, $opcje));
  3. ?>


też próbowałem... w tej funkcji jest zwróć ponieważ całośc jest dodawana do formularza... mimo echo nadal nie działa... co robić?
Kuziu
Przeczytaj jeszcze raz początek mojego posta exclamation.gif!!!
The Night Shadow
Czytałem przecieżexclamation.gif!! ;- pkrzykiem wiele tu nie zdziałasz ;- p szczególnie jeśli chodzi o uświadamianie początkujących.

Co do wyszukiwania błędów zapomocą echo... Ja jestem w tym raczkującym. Wszystko jest przecież w porządku, pierwszt arrgument jest podawany, drugi również, trzeci (za pomocą echo sprawzdałem) przyjmuje wartość login, czwarty to ta tabilca, która przecież podług tego co podawano mi na forum jest podana prawdiłowo (nie wiem na jakiej zasadzie echo wyświetla tablicę - mi wpisało array...) Ot tyle na temat. W samej funkcji przecież podług manuala i tego co sam pisałeś jest to wszystko napisane poprawnie więc nierozumiem.

Może nie tyle nie czytam, co ze względu na to, że jestem początkującym czegoś nie widzę, bo nie mam wystarczającego doświadczenia?
Kuziu
Dokładnie napisałem do którego miejsca dochodzi a gdzie przestaje działać


$rodzaj != $rodzaj_opcji

Echem sprawdzasz do którego miejsca kod działa CI dobrze.
Jeśli nie wchodzi do IF'a mimo że podajesz mu 1 więc jest dobrze to coś nie tak musi być ze zmiennymi i jest.

Masz w definicji funkcji argument $rodzaj_opcji a w if'ie $rodzaj.

Ot i cała prawda.
A krzyczę bo nie lubię jak ktoś czeka na gotowe bo nie chce mu się pokombinować 5 minut, mimo że ktoś mu podpowiada bardzo blisko w której linii ma błąd.

Ale proszę tak przecież bedzie najprościej:

  1. <?php
  2.  
  3. function option($rodzaj_opcji, $nazwa_opcji, $zmienna_opcji, $tresci_opcji)  
  4. {
  5. if ($rodzaj_opcji==1){
  6. $zwroc .= '<select name="'.$nazwa_opcji.'">';
  7. foreach($tresci_opcji as $nazwa)
  8. {
  9.  
  10. $zwroc .= '<option "'; 
  11. if ($zmienna_opcji==$nazwa) 
  12. { 
  13. $zwroc .= 'selected="selected"'; 
  14. } 
  15. $zwroc .= '>"'.$nazwa.'"</option>';
  16. }
  17. $zwroc .= '</select>';
  18. return $zwroc;
  19. }
  20. }
  21.  
  22.  
  23. $opcje = array(
  24. 1 => 'loginu',
  25. 2 => 'adresu e-mail',
  26. 3 => 'numeru Gadu-Gadu',
  27. 4 => 'nicku Tlen',
  28. 5 => 'rangi',
  29. 6 => 'statusu',
  30. 7 => 'daty założenia/aktywacji konta',
  31. 8 => 'daty ostatniego logowania',
  32. 9 => 'adresu IP',
  33. );
  34. echo(option('1', 'wedlug', $sortowane_wedlug, $opcje));
  35.  
  36. ?>
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.