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:

<?php
function get_primary_domains($language)
{
	$querydb = "SELECT id, $language FROM fj_domains WHERE parent='1'";
	$result_domains = mysql_query($querydb);
	$fetch_domains = mysql_fetch_array($result_domains);	
	
	return $fetch_domains;
}
?>
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:

<?php
$options = get_primary_domains('hu'));

foreach($options as $key => $values)
{
	print $values . '<br />';
}
?>
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:

$eredmeny = mysql_query("SELECT azon, nev FROM tabla");
while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {
   printf("Azonosító: %s  Név: %s", $sor[0], $sor[1]); 
}
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...

function get_primary_domains($language)
{
    $querydb = "SELECT id, $language FROM fj_domains WHERE parent='1'";
    $result_domains = mysql_query($querydb);
    $ret = array()
    while ($record = mysql_fetch_array($result_domains)) {
        $ret[ $record[0] ] = $record[1];
    }
    return $ret;
}
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 :)]