Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Widzialność zmiennych przekazywanych przez funkcję.
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


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.

Ten post edytował miedzna 19.02.2009, 13:10:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 17:53