Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: element tablicy zwróconej w funkcji
Forum PHP.pl > Forum > PHP
flashdev
Mam tablicę zwracaną przez funkcję:

Kod
$sql->fetchArray()


Mogę użyć elementu tablicy w taki sposób:

Kod
$temp = $sql->fetchArray()
echo $temp['element'];


W jaki sposób dokonać tego samego bez używania zmiennej pomocniczej?

W JS wystarczyloby napisać: funkcja()['element'].
W php nie działa taki trick.
ayeo
Witam!

Chyba się nie da tak zrobić. Możesz natomiast użyć metody zwracanego obiektu:
  1. $sql->fetchArray()->getElement("element");


Pozdrawiam!
flashdev
Wywołanie metody pewnie będzie wolniejsze, ale "pomógł" się należy winksmiley.jpg
Zawsze to jakaś dodatkowa wiedza dla mnie smile.gif
andycole
Jezeli masz tam w $sql->fetchArray() tablice to mozesz uzyc $sql->fetchField('nazwa_pola'), gdzie w metodzie fetchField() najpierw sprawdzasz czy istnieje indeks o nazwie "nazwa_pola".
singles
Jeśli to Twoje własne rozwiązanie, a nie gotowa klasa, to można i tak
  1. public function fetchArray($key = null)
  2. {
  3. $this->dane = array(); //tutaj je sobie wstawiasz czy tam pobierasz
  4. if (!is_null($key)) {
  5. return $this->dane[$key];
  6. }
  7.  
  8. return $this->dane;
  9. }


Takie rozwiązanie ma na pewno jeden plus i jeden minus. Jak przekazany parametr do metody jest pusty, to dostaniesz wszystkie dane, jak jest pełny to tylko wybrane. Żadnych ifów po stronie skryptu, tylko w metodzie. Minus jest taki, że nazwa fetchArray jest w tym momencie myląca.
andycole
  1. public function fetchArray(){
  2. $this->dane = array();
  3. return $this->dane;
  4. }
  5.  
  6. public function fetchField($strField){
  7. $arrTab = $this->fetchArray();
  8. if(!empty($strField))
  9. if($arrTab){
  10. if(array_key_exists($strField, $arrTab))
  11. return $arrTab[$strField];
  12. }
  13. return false;
  14. }


Tak bedzie chyba bardziej elastycznie i nie mylaco smile.gif
singles
Cytat(andycole @ 16.08.2009, 14:21:23 ) *
Tak bedzie chyba bardziej elastycznie i nie mylaco smile.gif

Tak, ale pisałem o tym wyżej. W twojej wersji w zależności od tego, czy jest ustawiona zmienna $key, $strField czy inna, to musi być if w kodzie skryptu, żeby wybrać odpowiednią metodę.
A w moim wypadku if jest zaszyty w kodzie metody i po cichu realizuje przeciążanie funkcji, którego w PHP standardowo nie ma. Minus mojego rozwiązania jest taki, że format zwracanych danych różni się w zależności od przekazanego parametru bądź jego braku. Tylko jak już pisałem, nazwa metody jest myląca - teoretycznie powinno być fetchFieldIfParamPassedInOtherWayFetchArray(), ale nie bądźmy masochistami smile.gif
flashdev
Widzę, że temat się rozwinął, a mnie wcale nie chodziło o ten konkretny przypadek z funkcją fetchArray (to był tylko przykład).

Taki kod oczywiscie zadziała prawidłowo:
  1. $tab = array('a'=>'b', 'b'=>'c');
  2. echo $tab['a'];


Ale taki wygeneruje już błąd:
  1. echo array('a'=>'b', 'b'=>'c')['a'];


Po sprawdzeniu jednak okazało się, sposób ayeo też nie działa tak jak chciałem:
  1. echo array("a"=>"b", "b"=>"c")->getElement("a");


Pewnie to ta metoda fetchArray wprowadziła tyle zamieszania. Powinienem był wpisać przykladowaFunkcja smile.gif
andycole
aaa to na moje oko to co chcesz osiagnac jest niewykonalne w php bo array to typ, a nie obiekt
flashdev
Ok, chciałem się tylko dowiedzieć jak w php zrobić coś z czym w js nie ma problemu, po to aby ułatwić sobie życie.

Kod
// java script:
alert(new Array("a", "b", "c")[1]);
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.