Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]return bad result
Forum PHP.pl > Forum > Przedszkole
eminiasty
tablica zawarta w $ds = zawiera 000,001,002
po zwroceniu do kontrolera wyniku z return zwraca sie tylko 000
cale dzialanie jest w petli foreach kotra leci po wszystkich po kolei...
proszę o wytłumaczenie o co tu chodzi?
nie ma tu żadnego break, else, ani nic co by stopowalo petle? chyba ze gdy wykonuje sie return jest jakis automatyczny STOP?
pisane w codeigniter

  1. $ds = array_unique($data);
  2.  
  3. foreach ($ds as $itemdir) {
  4. $this->db->select('number,icon');
  5. $this->db->from('modules');
  6. $this->db->where('number', $itemdir);
  7. $this->db->where('visible', 1);
  8. $this->db->where('active', 1);
  9. $this->db->order_by('name', 'ASC');
  10. $query = $this->db->get();
  11.  
  12. if ($query->num_rows() > 0) {
  13. return $query->result_array();
  14. }
  15.  
  16. }
trueblue
Sam sobie odpowiedziałeś.
Jeśli chcesz zwrócić tablice, to najpierw ją zbuduj i wypełnij, a dopiero zwróć.
eminiasty
  1. array(3) { [0]=> string(3) "000" [1]=> string(3) "001" [2]=> string(3) "002" } array(1) { [0]=> array(1) { ["number"]=> string(3) "000" } }


var_dump($ds);

nie bardzo rozumiem

a to co jest jak nie tablica?
trueblue
A tą zmienną zwracasz?
eminiasty
nie ale na jej podstawie biega petla wiec powinna zrobic wiecej okrazen niz 1?

Dump z query zwraca poprawne dane , czyli 3 zapytania ale w momencie gdy zakomentuje return
  1. var_dump($query);
  2. if ($query->num_rows() > 0) {
  3. // return $query->result_array();
  4. }


gdy odkomentuje zwraca tylko 1 wynik, jak to możliwe?
trueblue
Jeszcze raz. Sam sobie na to odpowiedziałeś w pierwszym poście.
Naprawdę uważasz, że funkcja po zwróceniu wyniku wróci "do samej siebie" i to iteracji pętli z jakiej wyskoczyła?
eminiasty
w pierwszym poście strzelałem z przyczyna..
pytanie czemu wyskakuje? bo tego elementu nie rozumiem
i prosił bym o jakiś przykład jak to powinno wyglądać bym wiedział na przyszłość jak podchodzić do takiego zagadnienia
trueblue
Czemu wyskakuje? Nie żartuj.
Propozycję rozwiązania podałem Ci w moim pierwszym poście.
eminiasty
To jest chyba to o czym mówisz, jednak przy każdej iteracji stworzyło mi osobna tablice, wiec jeszcze cos nie tak

  1. $ds = array_unique($data);
  2.  
  3.  
  4. $array_result = array();
  5. foreach ($ds as $itemdir) {
  6. $this->db->select('number');
  7. $this->db->from('modules');
  8. $this->db->where('number', $itemdir);
  9. $this->db->where('visible', 1);
  10. $this->db->where('active', 1);
  11. $this->db->order_by('name', 'ASC');
  12. $query = $this->db->get();
  13. //var_dump($query);
  14. $array_result[] = $query->result_array();
  15.  
  16. }
  17. if ($query->num_rows() > 0) {
  18. return $array_result;
  19. }


  1. array(3) { [0]=> array(1) { [0]=> array(1) { ["number"]=> string(3) "000" } } [1]=> array(1) { [0]=> array(1) { ["number"]=> string(3) "001" } } [2]=> array(1) { [0]=> array(1) { ["number"]=> string(3) "002" } } }
trueblue
Zwróciło jedną tablicę, trzyelementową. Ta natomiast zawiera w sobie tablice.
Jeśli chcesz zwrócić jednowymiarową tablicę, to wrzucaj do niej tylko to co potrzebujesz z result_array() (sprawdź co tu dostajesz).

P.S. Warunek na ilość wierszy w obecnym miejscu nie ma sensu. W ogóle nie jest potrzebny.
eminiasty
  1. $this->db->select('number');


potrzebuje number, no to go wybieram ?

  1. $array_result[] = $query->result_array();


a tu wrzucam w tablice?
trueblue
Ale może jednak sprawdzisz co dostajesz od result_array()?
eminiasty
napisalem powyzej

problem rozwiazalo uzycie:
  1. $array_result[] = $query->first_row('array');


ale mysle ze chodzilo Ci o cos innego i jest lepsze rozwiazanie

@ref

  1. public function jakasMetoda()
  2. {
  3. $array_result = array();
  4. foreach (scandir(APPPATH . 'controllers\\frontend\\pages\\') as $file) {
  5. if ($file != '.' && $file != '..') {
  6. //var_dump($file);
  7. $this->db->select('id,slug');
  8. $this->db->from('pages');
  9. $this->db->where('name', $file);
  10. $query = $this->db->get();
  11. $array_result[] = $query->first_row('array');
  12.  
  13. }
  14. }
  15. return $array_result;
  16. }

zwrot wyniku:
array(2) { [0]=> array(0) { } [1]=> array(0) { } }
gdzie dump z query zwraca całe zapytania.
Możecie mi dać przykład jak to powinno być zwrócone.. bo to niemożliwe, że jest wynik a nie mogę go zworcic do widoku
trzczy
Tam chyba brakuje metody row_array()

Na stackoverflow jest np. takie rozwiązanie:

  1. $query = $this->db->get();
  2.  
  3. if ( $query->num_rows() > 0 )
  4. {
  5. $row = $query->row_array();
  6. return $row;
  7. }


Poza tym nie wyświetla żadnych błędów?
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.