Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Widzialność zmiennych przekazywanych przez funkcję.
Forum PHP.pl > Forum > Przedszkole
miedzna
Mam taką funkcję:

  1. <?php
  2. function NazwaFunkcji($do){
  3.  
  4.    $query = mysql_query("
  5.    SELECT tp.id, tp.name, upper(r.jednostka) AS skadDuze, r.jednostka AS skadMale
  6.    FROM tp, raporty r, tp_opis o
  7.    WHERE r.j_id = " . $do . "
  8.    AND r.raport_id = tp.id
  9.    AND o.opis_id = tp.id
  10.    AND UNIX_TIMESTAMP( o.start ) <= UNIX_TIMESTAMP( DATE( NOW( ) ) )
  11.    AND UNIX_TIMESTAMP( o.stop ) >= UNIX_TIMESTAMP( DATE( NOW( ) ) )
  12.    ORDER BY tp.name, tp.id
  13.    ");
  14.  
  15.    while($row = mysql_fetch_array($query)){
  16.  
  17.        $id = array($row["id"]);
  18.        $name = array($row["name"]);
  19.  
  20.        $ArrayRaportyF_doJednostki = array_combine($id, $name);
  21.    }
  22. }
  23. ?>


która zwraca mi array $ArrayRaportyF_doJednostki. Teraz w innym pliku dołączam NazwaFunkcji($do) i daję pętlę, która powinna operować na wynikach tej funkcji:

  1. <?php
  2. foreach ($ArrayRaportyF_doJednostki as $id => $name){
  3. echo "Klucz: $id; Wartość: $name<br>\n";
  4. }
  5. ?>


i dostaję komunikat o błędzie: Warning: Invalid argument supplied for foreach() in ...

pętla nie widzi tabeli zwracanej przez funkcję. A jeżeli pętlę umieszczę wewnątrz funkcji, to działa.
nospor
Cytat
która zwraca mi array $ArrayRaportyF_doJednostki
Ta funkcja ci nic nie zwraca.

zajrzyj do manuala do dzialu funkcje i doczytaj sobie co trzeba dodac, by funkcja cos zwracala
miedzna
Ale jak dodam na końcu funkcji: return $ArrayRaportyF_doJednostki; to też ten sam błąd.
nospor
bo przeciez musisz odebrac to co funkcja zwraca, a tego w kodzie nigdzie nie ma
miedzna
I tego właśnie nie wiem, przeczytałem to: http://pl.wikibooks.org/wiki/PHP/Funkcje i nic tam nie znalazłem sad.gif
artur_dziocha
  1. <?php
  2. $id = array();
  3. $name = $array();
  4. while($row = mysql_fetch_array($query)){
  5. $id[] = $row['id'];
  6. $name[] = $row['name'];  
  7. }
  8. ArrayRaportyF_doJednostki = array_combine($id, $name);
  9. return ArrayRaportyF_doJednostki;
  10. ?>
nospor
po pierwsze: manual: http://pl.php.net/manual/pl/functions.returning-values.php

po drugie:
  1. <?php
  2. function test(){
  3. return 4;  //tu funkcja zwraca
  4. }
  5.  
  6. $zm = test(); //tu odbierasz to co funkcja zwraca
  7. echo $zm; //tu to wykorzystujesz
  8. ?>

Tyle czasu na forum i jeszcze z czyms takim biegac?
miedzna
Zrobiłem tak:

funkcja:

  1. <?php
  2. function RaportyF_doJednostki($do){
  3.  
  4.    $id = array();
  5.    $name = array();
  6.  
  7.    $query = mysql_query("...");
  8.  
  9.    while($row = mysql_fetch_array($query)){
  10.  
  11.        $id[] = $row['id'];
  12.        $name[] = $row['name'];
  13.  
  14.        $ArrayRaportyF_doJednostki = array_combine($id, $name);
  15.  
  16.    }
  17.    return $ArrayRaportyF_doJednostki;
  18. }
  19. ?>


następnie dołączam:

  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3.  
  4. foreach ($test as $id => $name){
  5.    echo "Klucz: $id; Wartość: $name<br>\n";
  6. }
  7. ?>


i powstaje pętla w nieskonczoność, aż mi apache siada.
JoShiMa
O matko, ale rzeźba... Jeśli juz koniecznie musisz to combine to zrób tak:

  1. <?php
  2. function RaportyF_doJednostki($do){
  3.  
  4.   $id = array();
  5.   $name = array();
  6.  
  7.   $query = mysql_query("...");
  8.  
  9.   while($row = mysql_fetch_array($query)){
  10.  
  11.       $id[] = $row['id'];
  12.       $name[] = $row['name'];
  13.  
  14.   }
  15.   $ArrayRaportyF_doJednostki = array_combine($id, $name);
  16.   return $ArrayRaportyF_doJednostki;
  17. }
  18. ?>


Bo po Twojemu to kombinujesz to rekurencyjnie a wystarczy raz na początku

A prościej było by tak:
  1. <?php
  2. function RaportyF_doJednostki($do){
  3.   $query = mysql_query("...");
  4.  
  5.   while($row = mysql_fetch_array($query)){
  6.       $ArrayRaportyF_doJednostki[$row['id']] =  $row['name'];
  7.   }
  8.   return $ArrayRaportyF_doJednostki;
  9. }
  10. ?>


I bez względu na to którą realizację wybierzesz to sprawdź sobie co Ci zwraca

  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3. echo count($test);
  4. ?>
nospor
  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3.  
  4. print_r($test);
  5. ?>
miedzna
W pętli dałem te same nazwy $id i $name co w funkcji i powstaało zapętlenie, że ho... wystarczyło że zmieniłem na inne i jest już ok smile.gif

Dziękuję.

A jeszcze jedno pytanko. Funkcja teraz przekazuje 2 zmienne, $id i $name, a jeżeli chcę dołączyć jeszcze jedną zmienną?
nospor
  1. <?php
  2. $ArrayRaportyF_doJednostki[$row['id']] =  array('name' => $row['name'], 'inna' => $row['inna']);
  3. ?>
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.