Comment stocker les valeurs de la boucle foreach dans un tableau?


115

Besoin de stocker les valeurs de la boucle foreach dans un tableau, besoin d'aide pour cela.

Le code ci-dessous ne fonctionne pas, ne stocke que la dernière valeur, essayé $items .= ...,mais cela ne fait pas non plus l'affaire, toute aide sera appréciée.

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

print_r($items);

12
.=ajoute du texte. []ajoute à un tableau.
Skilldrick

De loin, Skilldrick l'a cloué avec la seule doublure ci-dessus, pas besoin d'aller plus loin.
user1946891

Réponses:


255

Déclarez le $itemstableau en dehors de la boucle et utilisez $items[]pour ajouter des éléments au tableau:

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

print_r($items);

7
N'extrayez pas non plus la clé ( $i) si vous ne comptez pas l'utiliser.
Matteo Riva

2
Déclarer $items = array();avant foreach n'est même pas nécessaire, non? php créera simplement un tableau vide
BassMHL

que se passerait-il si certains des $ username étaient nuls? Nous avons une situation similaire où les enregistrements proviennent d'une API, et d'une manière ou d'une autre, nous nous retrouvons avec des enregistrements nuls dans le tableau.
pixelwiz

14

Utilisation

$items[] = $username;

7
Assurez-vous simplement d' $items = array();apparaître avant la boucle.
Skilldrick

Pouvez-vous expliquer pourquoi vous devez déclarer $ items = array (); avant la boucle. J'ai fait quelque chose comme ça et je ne l'ai pas déclaré et cela fonctionne toujours. Vaut-il mieux l'ajouter ou n'est-ce pas obligatoire?
robk27


7

Essayer

$items = array_values ( $group_membership );

1
Eh bien, je suppose que la boucle foreach fait plus que cela, sinon c'est la meilleure solution.
Matteo Riva

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

3
Pas besoin de trucs $ count. Juste $ array [] = $ thing;

Je vais m'arrêter de voter contre cette réponse bien que: 1. C'est une réponse de code seulement qui 2. enseigne aux développeurs les pratiques inutiles / mauvaises ... parce que c'est une excellente occasion de faire la chose disciplinée et de faire de Stackoverflow une meilleure ressource .
mickmackusa le

J'ai un problème où mon tableau ne renvoie que le dernier élément qui a été poussé dans le tableau. L'utilisation de count comme suggéré par vous a résolu mon problème.
Jass Preet le

2

Tu peux essayer de faire ma réponse,

vous avez écrit ceci:

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

print_r($items);
?>

Et dans votre cas, je ferais ceci:

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

Comme vous le montrez dans votre question, il semble que vous ayez besoin d'un tableau de noms d'utilisateurs appartenant à un groupe particulier :) Dans ce cas, je préfère une bonne requête SQL avec une simple boucle 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; 
} 
?>

whileest plus rapide, mais le dernier exemple n'est que le résultat d'une observation. :)


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

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

Essayez simplement ce qui précède dans votre code.


Cette réponse de code uniquement ne doit être utilisée par aucun développeur. Le compteur et l'incrémentation ne sont pas du tout nécessaires.
mickmackusa le

0

Juste pour vous éviter trop de fautes de frappe:

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

-1

cette question semble assez ancienne mais si vous la passez, vous pouvez utiliser la fonction intégrée PHP array_push () pour pousser des données dans un tableau en utilisant l'exemple ci-dessous.

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

Faire des appels de fonction itérés est inefficace. La syntaxe de poussée entre accolades (suggérée 8 ans plus tôt) sera plus efficace. Cette réponse ne doit pas être utilisée pour pousser des éléments uniques dans un tableau. (et la déclaration de $iest inutile)
mickmackusa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.