Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> element tablicy zwróconej w funkcji
flashdev
post
Post #1





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
ayeo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!

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


Pozdrawiam!
Go to the top of the page
+Quote Post
flashdev
post
Post #3





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Wywołanie metody pewnie będzie wolniejsze, ale "pomógł" się należy (IMG:style_emoticons/default/winksmiley.jpg)
Zawsze to jakaś dodatkowa wiedza dla mnie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
andycole
post
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

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


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".
Go to the top of the page
+Quote Post
singles
post
Post #5





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

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


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.

Ten post edytował singles 16.08.2009, 13:07:56
Go to the top of the page
+Quote Post
andycole
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

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


  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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował andycole 16.08.2009, 13:22:10
Go to the top of the page
+Quote Post
singles
post
Post #7





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

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


Cytat(andycole @ 16.08.2009, 14:21:23 ) *
Tak bedzie chyba bardziej elastycznie i nie mylaco (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował singles 16.08.2009, 15:22:09
Go to the top of the page
+Quote Post
flashdev
post
Post #8





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował flashdev 16.08.2009, 15:43:11
Go to the top of the page
+Quote Post
andycole
post
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

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


aaa to na moje oko to co chcesz osiagnac jest niewykonalne w php bo array to typ, a nie obiekt
Go to the top of the page
+Quote Post
flashdev
post
Post #10





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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]);


Ten post edytował flashdev 16.08.2009, 17:23:43
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 - 05:05