Come memorizzare i valori dal ciclo foreach in un array?


115

È necessario memorizzare i valori dal ciclo foreach in un array, è necessario aiuto per farlo.

Il codice seguente non funziona, memorizza solo l'ultimo valore, provato $items .= ...,ma neanche questo funziona, qualsiasi aiuto sarà apprezzato.

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

print_r($items);

12
.=aggiunge del testo. []si aggiunge a un array.
Skilldrick

Di gran lunga Skilldrick ha inchiodato con l'unico rivestimento sopra, senza bisogno di andare oltre.
user1946891

Risposte:


255

Dichiara l' $itemsarray al di fuori del ciclo e usa $items[]per aggiungere elementi all'array:

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

print_r($items);

7
Inoltre, non estrarre la chiave ( $i) se non la utilizzerai.
Matteo Riva

2
Dichiarare $items = array();prima di foreach non è nemmeno necessario, giusto? php creerà semplicemente un array vuoto
BassMHL

cosa succederebbe se alcuni dei $ username fossero nulli? Abbiamo una situazione simile in cui i record provengono da un'API e in qualche modo stiamo finendo con alcuni record nulli nell'array.
pixelwiz


7

Provare

$items = array_values ( $group_membership );

1
Bene, presumo che il ciclo foreach stia facendo di più, altrimenti questa è la soluzione migliore.
Matteo Riva

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

3
Non c'è bisogno di $ count roba. Solo $ array [] = $ cosa;

Ho intenzione di trattenere il downvoting di questa risposta anche se: 1. È una risposta solo codice che 2.Insegna agli sviluppatori pratiche non necessarie / cattive ... perché questa è una grande opportunità per fare la cosa Disciplinato e rendere Stackoverflow una risorsa migliore .
mickmackusa

Ho un problema in cui il mio array restituisce solo l'ultimo elemento che è stato inserito nell'array. L'utilizzo di count come suggerito da te ha risolto il mio problema.
Jass Preet

2

Puoi provare a fare la mia risposta,

hai scritto questo:

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

print_r($items);
?>

E nel tuo caso lo farei:

<?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;
} ?>

Come mostri nella tua domanda, sembra che tu abbia bisogno di un array di nomi utente che si trovano in un particolare gruppo :) In questo caso preferisco una buona query sql con un semplice ciclo while;)

<?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; 
} 
?>

whileè più veloce, ma l'ultimo esempio è solo il risultato di un'osservazione. :)


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

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

Prova quanto sopra nel tuo codice.


Questa risposta di solo codice non deve essere utilizzata da nessuno sviluppatore. Il contatore e l'incremento non sono affatto necessari.
mickmackusa

0

Solo per risparmiare troppi errori di battitura:

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

-1

questa domanda sembra piuttosto vecchia ma nel caso in cui la passi, puoi usare la funzione incorporata in PHP array_push () per inserire i dati in un array usando l'esempio seguente.

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

Effettuare chiamate di funzione ripetute è inefficiente. La sintassi di spinta delle parentesi quadre (suggerita 8 anni prima) sarà più efficiente. Questa risposta non deve essere utilizzata per inserire singoli elementi in un array. (e la dichiarazione di $iè inutile)
mickmackusa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.