So greifen Sie mit einer Foreach-Schleife auf MySQL-Ergebnisdaten zu

Lesezeit: 4 Minuten

Benutzer-Avatar
med

Ich entwickle eine PHP-App, die eine Datenbankklasse verwendet, um MySQL abzufragen.

Die Klasse ist hier: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/
* Beachten Sie, dass im Tutorial mehrere schlechte Praktiken demonstriert werden – es sollte nicht als moderner Leitfaden verwendet werden!

Ich habe einige Änderungen an der Klasse vorgenommen, um sie meinen Bedürfnissen anzupassen, aber es gibt ein Problem (vielleicht ein dummes).

Beim Benutzen select() Es gibt ein mehrdimensionales Array zurück, das Zeilen mit 3 assoziativen Spalten enthält (ID, Vorname, Nachname):

Array
(
    [0] => Array
        (
            [id] => 1
            [firstname] => Firstname one
            [lastname] => Lastname one
        )

    [1] => Array
        (
            [id] => 2
            [firstname] => Firstname two
            [lastname] => Lastname two
        )

    [2] => Array
        (
            [id] => 3
            [firstname] => Firstname three
            [lastname] => Lastname three
        )
)

Jetzt möchte ich, dass dieses Array als MySQL-Ergebnis verwendet wird (mysql_fetch_assoc()).

Ich weiß, dass es mit verwendet werden kann foreach(), aber das ist mit einfachen/flachen Arrays. Ich denke, dass ich eine neue umdeklarieren muss foreach() innerhalb jedes foreach()aber ich denke, dass dies zu einer Verlangsamung oder einer höheren Serverlast führen könnte.

Also wie bewerben foreach() mit diesem mehrdimensionalen Array der einfachste Weg?

  • Warum brauchen Sie eine zweite foreach? Sie haben alle Ihre Variablen mit nur einer Schleife bereit, Sie können einfach auf sie zugreifen als $value['id']etc.

    – jeroen

    20. Juni 2011 um 15:29 Uhr

Benutzer-Avatar
Brad

Sie können foreach hier problemlos verwenden.

foreach ($rows as $row) {
    echo $row['id'];
    echo $row['firstname'];
    echo $row['lastname'];
}

Ich denke, Sie sind es gewohnt, mit numerischen Indizes auf die Daten zuzugreifen (z $row[0]), aber das ist nicht nötig. Wir können benutzen assoziative Arrays um die Daten zu bekommen, nach denen wir suchen.

  • Ich bekomme nicht den ersten Index von jedem Index. kannst du mir diesbezüglich weiterhelfen?

    – Sarvesh Tiwari

    18. März 2020 um 21:23 Uhr

  • @SarveshTiwari Stellen Sie eine neue Frage.

    – Brad

    18. März 2020 um 21:28 Uhr

Sie können verwenden array_walk_recursive:

array_walk_recursive($array, function ($item, $key) {
    echo "$key holds $item\n";
});

  • Warum würden Sie das für jeden tun? Scheint eine Verschwendung von Speicher zu sein, anonyme Funktionen für jede Iteration zu definieren.

    – Brad

    20. Juni 2011 um 16:12 Uhr

  • @Brad, ich bevorzuge es in diesem Fall nicht gegenüber foreach, ich wollte nur eine Alternative zeigen. Übrigens denke ich nicht, dass es viel Speicher verschwendet, ich denke, PHP definiert diese Funktion nur einmal, ruft sie aber für jede Iteration auf.

    – Karolis

    20. Juni 2011 um 17:54 Uhr


  • die Frage fragt zu verwenden foreach.Aber ich denke, das ist bequemer, denn wenn Sie Elemente in einem Array hinzufügen (sagen wir, Sie haben hinzugefügt age), müssen Sie nicht ändern array_walk_recursive Funktion

    – ajinzrathod

    16. April 2020 um 8:50 Uhr

Bei Arrays in PHP ist die Foreach-Schleife immer eine schöne Lösung.
In diesem Fall könnte es zum Beispiel sein:

foreach($my_array as $number => $number_array)
    {
    foreach($number_array as $data = > $user_data)
        {
            print "Array number: $number, contains $data with $user_data.  <br>";
        }
    }

Dies wäre ein Kommentar unter Brads Antwort gewesen, aber ich habe keinen ausreichend hohen Ruf.

Kürzlich fand ich heraus, dass ich auch den Schlüssel des mehrdimensionalen Arrays brauchte, dh es war nicht nur ein Index für das Array, in der foreach-Schleife.

Um dies zu erreichen, könnten Sie etwas verwenden, das der akzeptierten Antwort sehr ähnlich ist, aber stattdessen den Schlüssel und den Wert wie folgt aufteilen

foreach ($mda as $mdaKey => $mdaData) {
    echo $mdaKey . ": " . $mdaData["value"];
}

Hoffe das hilft jemandem.

Holla/Hallo, Ich habe es verstanden! Sie können den Dateinamen, tmp_name, file_size usw. leicht erhalten. Ich werde Ihnen also zeigen, wie Sie den Dateinamen mit einer Codezeile erhalten.

for ($i = 0 ; $i < count($files['name']); $i++) {
    echo $files['name'][$i].'<br/>';
}

Es wird auf meinem PC getestet.

Benutzer-Avatar
Rmj86

Aus jedem Wert in einem mehrdimensionalen Array Details herauszuholen, ist ganz einfach, sobald Sie Ihr Array eingerichtet haben. Das ist also das Array:

$example_array = array(
array('1','John','Smith'),
array('2','Dave','Jones'),
array('3','Bob','Williams')
);

Verwenden Sie dann eine foreach-Schleife und lassen Sie das Array wie folgt durchlaufen:

foreach ($example_array as $value) {
echo $value[0]; //this will echo 1 on first cycle, 2 on second etc....
echo $value[1]; //this will echo John on first cycle, Dave on second etc....
echo $value[2]; //this will echo Smith on first cycle, Jones on second etc....
}

Sie können um ihn herum echoen, was immer Sie möchten, um in eine Tabelle zu echoen:

echo "<table>"
    foreach ($example_array as $value) {
    echo "<tr><td>" . $value[0] . "</td>";
    echo "<td>" . $value[1] . "</td>";
    echo "<td>" . $value[2] . "</td></tr>";
    }
echo "</table>";

Sollte Ihnen eine Tabelle wie diese geben:

|1|John|Smith   |
|2|Dave|Jones   |
|3|Bob |Williams|

Benutzer-Avatar
aorcsik

Beispiel mit mysql_fetch_assoc():

while ($row = mysql_fetch_assoc($result))
{
    /* ... your stuff ...*/
}

In Ihrem Fall mit foreachmit dem $result Array, aus dem Sie kommen select():

foreach ($result as $row)
{
    /* ... your stuff ...*/
}

Es ist ähnlich, mit der richtigen Iteration.

1018830cookie-checkSo greifen Sie mit einer Foreach-Schleife auf MySQL-Ergebnisdaten zu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy