Wie speichere ich Werte aus einer foreach-Schleife in einem Array?


115

Müssen Sie Werte aus jeder Schleife in einem Array speichern, brauchen Sie dabei Hilfe.

Der folgende Code funktioniert nicht, speichert nur den letzten Wert, der versucht wurde, $items .= ...,aber das reicht auch nicht aus, jede Hilfe wird geschätzt.

foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);

12
.=fügt Text hinzu. []wird an ein Array angehängt.
Skilldrick

Bei weitem hat Skilldrick es mit dem einen Liner oben genagelt, ohne weiter gehen zu müssen.
user1946891

Antworten:


255

Deklarieren Sie das $itemsArray außerhalb der Schleife und $items[]fügen Sie dem Array Elemente hinzu:

$items = array();
foreach($group_membership as $username) {
 $items[] = $username;
}

print_r($items);

7
Extrahieren Sie den Schlüssel ( $i) auch nicht, wenn Sie ihn nicht verwenden möchten.
Matteo Riva

2
Eine Erklärung $items = array();vor foreach ist nicht einmal notwendig, oder? PHP wird nur ein leeres Array erstellen
BassMHL

Was würde passieren, wenn einige der $ username null sind? Wir haben eine ähnliche Situation, in der Datensätze aus einer API kommen, und irgendwie haben wir einige Nulldatensätze im Array.
Pixelwiz

14

Verwenden

$items[] = $username;

7
Stellen Sie einfach sicher, dass $items = array();vor der Schleife angezeigt wird.
Skilldrick

Können Sie uns erklären, warum Sie $ items = array () deklarieren müssen? vor der Schleife. Ich habe so etwas gemacht und es nicht deklariert und es funktioniert immer noch. Ist es besser, es hinzuzufügen oder ist es nicht erforderlich?
Robk27

Überprüfen Sie dies heraus @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur

7

Versuchen

$items = array_values ( $group_membership );

1
Nun, ich gehe davon aus, dass die foreach-Schleife mehr als das tut, sonst ist dies die beste Lösung.
Matteo Riva

5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>

3
Keine Notwendigkeit für $ count Zeug. Nur $ array [] = $ thing;

Ich werde mich zurückhalten, um diese Antwort herunterzustimmen, obwohl: 1. Es ist eine reine Code-Antwort, die 2. Entwicklern unnötige / schlechte Praktiken lehrt ... weil dies eine großartige Chance ist, die disziplinierte Sache zu tun und Stackoverflow zu einer besseren Ressource zu machen .
Mickmackusa

Ich habe ein Problem, bei dem mein Array nur das letzte Element zurückgibt, das in das Array verschoben wurde. Die Verwendung der von Ihnen vorgeschlagenen Anzahl hat mein Problem behoben.
Jass Preet

2

Sie können versuchen, meine Antwort zu tun,

das hast du geschrieben:

<?php
foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);
?>

Und in Ihrem Fall würde ich das tun:

<?php
$items = array();
foreach ($group_membership as $username) { // If you need the pointer (but I don't think) you have to add '$i => ' before $username
    $items[] = $username;
} ?>

Wie Sie in Ihrer Frage zeigen, benötigen Sie anscheinend eine Reihe von Benutzernamen, die zu einer bestimmten Gruppe gehören :) In diesem Fall bevorzuge ich eine gute SQL-Abfrage mit einer einfachen while-Schleife;)

<?php
$query = "SELECT `username` FROM group_membership AS gm LEFT JOIN users AS u ON gm.`idUser` = u.`idUser`";
$result = mysql_query($query);
while ($record = mysql_fetch_array($result)) { \
    $items[] = $username; 
} 
?>

whileist schneller, aber das letzte Beispiel ist nur ein Ergebnis einer Beobachtung. :) :)


0
$items=array(); 
$j=0; 

foreach($group_membership as $i => $username){ 
    $items[$j++]=$username; 
}

Versuchen Sie einfach das Obige in Ihrem Code.


Diese Nur-Code-Antwort sollte von keinem Entwickler verwendet werden. Der Zähler und das Inkrementieren sind überhaupt nicht notwendig.
Mickmackusa

0

Nur um Ihnen zu viele Tippfehler zu ersparen:

foreach($group_membership as $username){
        $username->items = array(additional array to add);
    }
    print_r($group_membership);

-1

Diese Frage scheint ziemlich alt zu sein, aber falls Sie sie bestehen, können Sie die in PHP integrierte Funktion array_push () verwenden, um Daten in einem Array anhand des folgenden Beispiels zu übertragen.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>

Das Durchführen iterierter Funktionsaufrufe ist ineffizient. Die Syntax für das Drücken von eckigen Klammern (8 Jahre zuvor vorgeschlagen) ist effizienter. Diese Antwort sollte nicht verwendet werden, um einzelne Elemente in ein Array zu verschieben. (und die Erklärung von $iist nutzlos)
mickmackusa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.