Array
Stephan
- php
Hallo zusammen,
ich habe eine (warscheinlich) triviale Frage, die mir aber Kopfzerbrechen bereitet:
Ich möchte eine MySQL Abfrage in ein Array holen und dann
an eine Funktion über geben. Irgendwie klappt das aber nicht.
function test ($navigation = array(), $menumode) {
$temp = $menumode;
for ($i=0; $i<sizeof($navigation); $i++) {
$temp = $temp.$i["name"]."<br>";
}
return $temp;
}
$navi = mysql_fetch_array($result);
echo test($navi ,'Hallo');
Ist das so grundsätzlich falsch, oder geht sowas überhaupt??
Gruß
Stephan
Hi,
function test ($navigation = array(), $menumode) {
Erster Fehler. Variablen, die mit einem Standardwert belegt werden können, müssen nach hinten in die Argumentliste, also
function test ($menumode, $navigation = array())
$temp = $menumode;
for ($i=0; $i<sizeof($navigation); $i++) {
$temp = $temp.$i["name"]."<br>";
}
Zweiter Fehler. $i ist ein Integer, die Laufvariable für die Schleife, KEIN Array, auf das man so zugreifen könnte (mit []).
Richtig wäre:
$temp = $temp.$navigation[$i]."<br>";
Aber das funktioniert auch NUR dann, wenn das Array kein assoziatives Array ist, sondern ein durchnummeriertes (in diesem Fall ist es eines, weil mysql_fetch_array ein solches liefert).
Besser wäre:
reset($navigation);
while (list(, $value) = each($navigation))
$temp .= $value."<br>";
So kann man die Funktion auch mit assoziatives Arrays aufrufen und es funktioniert.
Ist das so grundsätzlich falsch, oder geht sowas überhaupt??
Nicht grundsätzlich, aber doch recht unrichtig :-)
nix
Hi nix,
danke für den Tipp!
Jetzt hab ich nur das Problem dass bei beiden Varianten
er mit die einzelnen DB-Felder durchläuft und nicht
die Datensätze.
Hast vielleicht dazu noch nen kleinen tipp?
Danke Stephan
Jetzt hab ich nur das Problem dass bei beiden Varianten
er mit die einzelnen DB-Felder durchläuft und nicht
die Datensätze.
Das hab ich nach dem Posten auch gemerkt :-)
Das liegt daran, dass du nur einmal mysql_fetch_array($result) aufrufst, was dir genau einen Datensatz liefert mit den Feldern als Array-Elemente.
Nehmen wir an, das Feld in der Datenbank heisst "URL". Dann musst du alle Datensätze auslesen und daraus das Array bilden.
$navi = array();
while ($ds = mysql_fetch_array($result, MYSQL_ASSOC))
$navi[] = $ds['URL'];
Natürlich kannst du das auch über die Position bestimmen, aber ich bevorzuge die erste Möglichkeit. Der Vollständigkeit halber:
while ($ds = mysql_fetch_array($result))
$navi[] = $ds[0];
Die Annahme ist natürlich, dass es das erste Feld in der Tabelle ist, das gelesen werden soll (Index 0).
mfg
nix
:-))
Okay, aber was ist nun wenn ich das array gerne mehrdimensional
hätte? So dass ich quasi das array an die funktion übergebe
und dort dann quasi pro datensatz ein paar felder sehen will?
Gruß Stephan ;-)
Was mir gerade als einzige sinnvolle Anwendung dazu einfällt, ist eine Navigation mit Link und dem Text dazu, was zwei Feldern in jedem Datensatz entsprechen würde. Ich schreib einfach mal ein bissel Code hin, kannst dann selbst rumbasteln :-)
function makelinklist($array=array()) // array of links
{
$text = "";
reset($array);
while (list(, $link) = each($array))
$text .= "<a href="".$link[0]."">".$link[1]."</a><br>";
return $text;
}
$result = mysql_query("SELECT link, text FROM links");
$links = array();
while ($ds = mysql_fetch_array($result))
$links[] = array($ds[0], $ds[1]);
echo makelinklist($links);
das prinzip sollte nun verstanden sein, oder?
hafe vun ;)
nix
Jep,
Prinzip ist verstanden! Denke ich zumindest ;)
Danke vielmals! :-)
hafe vun tu ;)
Stephan
Hello,
$navi = array();
while ($ds = mysql_fetch_array($result, MYSQL_ASSOC))
$navi[] = $ds['URL'];
Dann kann man auch gleich die destinierte Funktion
$ds = mysql_fetch_assoc($result)
benutzen. Die ist geringfügig schneller.
Grüße
Tom