ugrás a tartalomhoz

mysql_fetch_array() visszatérési értékére foreach nem megy

Anonymous · 2006. Okt. 18. (Sze), 16.16
Van egy fugvenyem:
  1. <?php  
  2. function get_primary_domains($language)  
  3. {  
  4.     $querydb = "SELECT id, $language FROM fj_domains WHERE parent='1'";  
  5.     $result_domains = mysql_query($querydb);  
  6.     $fetch_domains = mysql_fetch_array($result_domains);      
  7.       
  8.     return $fetch_domains;  
  9. }  
  10. ?>  
Az fj_domains nevu mySQL tabla a kovetkezo keppen nez ki:

id  |  parent |    en       |    hu
============================================
1   |    0    | options     |   opciok
2   |    1    | accouning   |   konyveloseg
3   |    1    | marketing   |   marketing   
Szeretnem azokat az adatokat amelyeket a "return $fetch_domains;" visszakuld, egy foreach-al lekerni es megnezni.

Probaltam igy:
  1. <?php  
  2. $options = get_primary_domains('hu'));  
  3.   
  4. foreach($options as $key => $values)  
  5. {  
  6.     print $values . '<br />';  
  7. }  
  8. ?>  
az a gond, hogy a kovetkezo adatokat kene megkapjam

konyveloseg
marketing

de nem akkar mukodni. A foreach $key szeretnem, hogy az ID legyen a fj_domains tablabol.

Tudnatok segiteni?
Koszonom !
 
1

manual... ;-)

TeeCee · 2006. Okt. 18. (Sze), 17.30
Abban benne van a mysql_fetch_array() használata:
  1. $eredmeny = mysql_query("SELECT azon, nev FROM tabla");  
  2. while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {  
  3.    printf("Azonosító: %s  Név: %s"$sor[0], $sor[1]);   
  4. }  
  5. mysql_free_result($eredmeny);  
Vagyis: a mysql_fetch_array() az mindig egy rekordok szed ki neked, ha már false-t ad vissza, akkor nincs több rekord a lekérdezésedben...

Ráadásul a "A foreach $key szeretnem, hogy az ID legyen a fj_domains tablabol." nem is fog menni, mert ugye egy rekordot egy tömbben kapsz vissza...

Nem szoktam megoldásokat közölni, de most jó kedvem van...
  1. function get_primary_domains($language)  
  2. {  
  3.     $querydb = "SELECT id, $language FROM fj_domains WHERE parent='1'";  
  4.     $result_domains = mysql_query($querydb);  
  5.     $ret = array()  
  6.     while ($record = mysql_fetch_array($result_domains)) {  
  7.         $ret$record[0] ] = $record[1];  
  8.     }  
  9.     return $ret;  
  10. }  
Egyébként, ha pl. adoDB-t használnál, akkor a $resultSet->getAssoc() pont olyat adna vissza, amilyet szerettél volna most kapni...
2

koszonom !

Anonymous · 2006. Okt. 18. (Sze), 17.40
Koszonom ! Mukodik.
Meg szeretnem meg kerdezni, hogy ezt nem lehet megoldani While ciklus hasznalata nelkul ?

Gondolom a foreach vegig megy rajta.
3

while != foreach

TeeCee · 2006. Okt. 18. (Sze), 18.38
nem, foreach-csel nem megoldható, legalábbis szépen nem. Pont erre találták ki a while-t, hogy egy feltétel teljesüléséig csináljon valamit.
A mysql_fetch_assoc/mysq_fetch_array/mysql_fetch_object mindig csak egy rekordot szed ki az eredményből. Ha már a végére ért, akkor false-t ad vissza, tehát erre ragyogóan lehet alkalmazni a while ciklust.
Másik megoldás pl. a for lenne, a mysql_num_rows()-al megkapod, hogy hány rekord van a lekérdezésed eredményeképpen, és akkor for-ral annyi mysql_fetch_array()-t csinálsz, ahány rekord van, de ismétlem: a while-ciklust pont ilyen dolgokra találták ki, még ha nem is tetszik annyira valamiért, mint a foreach() :)

[És köszönöm az adminnak, hogy kitörölte a duplikátumot, amit vétettem :)]