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);
Brad
quelle
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);
Andy E.
quelle
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;
Sjoerd
quelle
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 );
Dogbert
quelle
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); 
?>
Sushil Bharwani
quelle
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. :) :)

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

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

Versuchen Sie einfach das Obige in Ihrem Code.

Merkwürdiger Fall
quelle
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);
Don Phelix
quelle
-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);
?>
Adeojo Emmanuel IMM
quelle
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