wake-up-neo.net

php foreach mit mehrdimensionalem Array

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/

Ich habe einige Änderungen an der Klasse vorgenommen, um meine Bedürfnisse zu erfüllen, aber es gibt ein Problem (vielleicht ein dummes)

Bei der Verwendung von select () wird ein mehrdimensionales Array zurückgegeben, z. B. für eine Tabelle mit drei Spalten (id, vorname, nachname):

 Array 
 (
 [0] => Array 
 (
 [Id] => 1 
 [Vorname] => Vorname eins 
 [Nachname] => Nachname eins 
) 

 [1] => Array 
 (
 [Id] => 2 
 [Vorname] => Vorname zwei 
 [Nachname] => Nachname zwei
) 

 [2] => Array 
 (
 [Id] => 3 
 [Vorname] => Vorname drei 
 [Nachname] => Nachname drei 
) 
) 

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

Ich weiß, dass es mit foreach () verwendet werden kann, aber dies ist mit einfachen Arrays. Ich denke, dass ich jeweils ein neues foreach () innerhalb von foreach () neu deklarieren muss, aber ich denke, das könnte langsamer werden oder eine höhere Serverlast verursachen.

Wie kann man foreach () mit diesem mehrdimensionalen Array auf einfachste Weise anwenden?

Vielen Dank

47
medk

Sie können foreach hier gut verwenden.

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

Ich denke, Sie sind es gewohnt, auf die Daten mit numerischen Angaben (wie $row[0]) zuzugreifen, dies ist jedoch nicht erforderlich. Wir können assoziative Arrays verwenden, um die Daten zu erhalten, nach denen wir suchen.

104
Brad

Sie können array_walk_recursive verwenden:

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

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

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

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

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

Hoffe das hilft jemandem.

4
arvy3

Holla/Hallo , Ich habe es bekommen! Sie können den Dateinamen, den Namen tmp_name, file_size usw. einfach abrufen. Ich zeige Ihnen, 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.

3
Asraful Haque

Beispiel mit mysql_fetch_assoc():

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

In Ihrem Fall mit foreach erhalten Sie mit dem $result-Array von select():

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

Es ist sehr ähnlich mit der richtigen Wiederholung.

2
aorcsik

Es ist ziemlich einfach, aus jedem Wert in einem mehrdimensionalen Array Details zu erhalten, 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')
);

Dann verwenden Sie eine foreach-Schleife und lassen das Array folgendermaßen 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 alles, was Sie möchten, in einer Tabelle anzeigen lassen:

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 so einen Tisch geben:

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

Mit Arrays in PHP ist die Foreach-Schleife immer eine hübsche 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>";
        }
    }
2
nao_de_naoned

Idealerweise ist ein mehrdimensionales Array in der Regel ein Array von Arrays, so dass ich ein leeres Array deklarierte, dann Schlüssel- und Wertepaare aus dem Db-Ergebnis in einem separaten Array erstellte, und schließlich jedes bei der Iteration erstellte Array in das äußere Array schieben. Sie können das äußere Array zurückgeben, falls dies ein separater Funktionsaufruf ist. hoffentlich hilft das

$response = array();    
foreach ($res as $result) {
        $elements = array("firstname" => $result[0], "subject_name" => $result[1]);
        array_Push($response, $elements);
    }
1
Poly

Ich weiß, das ist eine ziemlich alte Antwort. Hier ist eine schnellere Lösung ohne foreach

Verwenden Sie array_column

print_r(array_column($array, 'firstname')); #returns the value associated with that key 'firstname'

Sie können auch überprüfen, bevor Sie den obigen Vorgang ausführen

if(array_key_exists('firstname', $array)){
   print_r(array_column($array, 'firstname'));
}
1

Wenn Sie eine String-Bearbeitung an Array-Elementen vornehmen müssen, z. B., ist die Verwendung der Rückruffunktion array_walk_recursive (oder auch array_walk ) gut geeignet. Beides ist nützlich, wenn Sie SQL-Anweisungen dynamisch schreiben.

In dieser Verwendung habe ich dieses Array mit jedem Element, das ein angehängtes Komma und eine neue Zeile benötigt.

$some_array = [];

daten in $ some_array
0: "Einige Zeichenfolge in einem Array"
1: "Eine andere Zeichenfolge in einem Array" 

Per php.net

Wenn callback mit den tatsächlichen Werten des Arrays arbeiten muss, Geben Sie den ersten Parameter des Rückrufs als Referenz an. Dann beliebig Änderungen an diesen Elementen werden im ursprünglichen Array vorgenommen. selbst.

array_walk_recursive($some_array, function (&$value, $key) {
    $value .= ",\n";
});

Ergebnis:
"Einige Zeichenfolge in einem Array,\n"
"Eine andere Zeichenfolge in einem Array\n" 

Das gleiche Konzept verwendet array_walk, um dem Feld den Namen der Datenbanktabelle voranzustellen.

$fields = [];

daten in $ -Feldern:
0: "Vorname"
1: "Nachname" 

$tbl = "Employees"

array_walk($fields, 'prefixOnArray', $tbl.".");

function prefixOnArray(&$value, $key, $prefix) { 
    $value = $prefix.$value; 
}

Ergebnis:
"Employees.FirstName"
"Employees.LastName" 


Ich wäre neugierig zu wissen, ob es bei foreach um Leistung geht, aber für ein Array mit einer Handvoll Elementen ist es meiner Meinung nach kaum zu überlegen.

0
Greg Bologna

Würde ein normaler Foreach in Ihrem Fall nicht grundsätzlich das gleiche Ergebnis wie ein mysql_fetch_assoc ergeben?

wenn Sie foreach für dieses Array verwenden, erhalten Sie ein Array mit diesen drei Schlüsseln: 'id', 'firstname' und 'lastname'.

Das sollte dasselbe sein, wie es mysql_fetch_assoc (in einer Schleife) für jede Zeile geben würde.

0
Yhn
foreach ($parsed as $key=> $poke)
{
    $insert = mysql_query("insert into soal 
                          (pertanyaan, a, b, c, d, e, jawaban)
                          values
                          ('$poke[question]',
                          '$poke[options][A]',
                          '$poke[options][B]',
                          '$poke[options][C]',
                          '$poke[options][D]',
                          '$poke[options][E]',
                          '$poke[answer]')");
}
0
endip