Array an Funktion übergeben
Karl-Heinz Osmer
- php
Hallöle,
aus einer Datenbankabfrage muss ich einige zusammengehörende Zeilen sammeln und an eine Funktion übergeben. Kann ich mich darauf verlassen, dass auch die Spaltennamen mit übergeben werden?
$arr_besucher = array();
while ( $row_besucher = mysql_fetch_array( $result_besucher )) {
$arr_besucher[] .= $row_besucher;
}
druckBesuchergruppe( $arr_besucher );
function druckBesuchergruppe( $arr_besucher ) {
for ( $i=0; $i<count($arr_besucher); $i++ ) {
$row_besucher = $arr_besucher[$i];
echo $row_besucher['name']."<br>"; // klappt nicht
}
}
Habe ich einen Denkfehler?
LG Kalle
function druckBesuchergruppe( $arr_besucher ) {
for ( $i=0; $i<count($arr_besucher); $i++ ) {
$row_besucher = $arr_besucher[$i];
echo $row_besucher['name']."<br>"; // klappt nicht
}
}
echo $row_besucher."<br>"; // ergibt "Array"
enthält also einen String
Hi!
aus einer Datenbankabfrage muss ich einige zusammengehörende Zeilen sammeln und an eine Funktion übergeben. Kann ich mich darauf verlassen, dass auch die Spaltennamen mit übergeben werden?
Übergebe der Funktion mysql_fetch_array als zweiten Parameter die PHP Konstante MYSQL_ASSOC. Dadurch liefert mysql_fetch_array ein assoziatives Array mit den Spaltennamen als Key aus (und nicht wie als Standardeinstellung sowohl ein assoziatives als auch numerisch indiziertes Array --> MYSQL_BOTH).
Darüber hinaus befinden sich noch ein paar Fehler im Code:
> $arr_besucher = array();
while($row_besucher = mysql_fetch_array($result_besucher, MYSQL_ASSOC)) {
$arr_besucher[] = $row_besucher;
> }
> druckBesuchergruppe($arr_besucher);
>
> function druckBesuchergruppe($arr_besucher) {
$row_besucher = array(); // nicht notwendig, aber vom Stil her besser
> for ( $i=0; $i<count($arr_besucher); $i++ ) { // for sollte durch eine foreach-Schleife ersetzt werden
> $row_besucher = $arr_besucher[$i];
> echo $row_besucher['name']."<br>";
> }
> }
Darüber hinaus solltest du u.U. auch einen Blick auf die PHP-Funktion mysql_fetch_assoc() werfen, damit ersparst du dir den Weg mit MYSQL_ASSOC und mysql_fetch_array().
Grüße,
Fabian St.
echo $begrüßung;
aus einer Datenbankabfrage muss ich einige zusammengehörende Zeilen sammeln und an eine Funktion übergeben. Kann ich mich darauf verlassen, dass auch die Spaltennamen mit übergeben werden?
Vertrauen ist schlecht. Kontrolle wäre angebracht.
Schau doch einfach nach, was in dem Array drin ist. Dazu eignen sich Funktionen wie print_r() und var_dump(), am besten mit einem <pre> davor.
while ( $row_besucher = mysql_fetch_array( $result_besucher )) {
$arr_besucher[] .= $row_besucher;
Der Punkt-Operator verkettet Strings. $row_besucher ist aber ein Array. Durch die automatische Typumwandlung wird $row_besucher zu einem String gecastet. Wenn ein Array in einen String gewandelt wird ergibt das aber nur ein "Array". Arrays sind einfach zu komplex, um sie mit einer allgemeingültigen Prozedur in einen String wandeln zu können.
Ein Array mit echo ausgeben zu wollen ergibt aus ebendiesem Grund auch nur ein "Array".
Wenn du den Punkt weglässt wird das Array $row_besucher als neues Element an $arr_besucher angehängt.
for ( $i=0; $i<count($arr_besucher); $i++ ) {
Um über alle Elemente eines Arrays zu iterieren ist foreach besser geeignet.
echo "$verabschiedung $name";