129 votes

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

J'ai besoin de stocker les valeurs de la boucle foreach dans un tableau, j'ai besoin d'aide pour le faire.

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

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

print_r($items);

13 votes

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

0 votes

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

297voto

Andy E Points 132925

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

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

print_r($items);

7 votes

Aussi, n'extrayez pas la clé ( $i ) si vous ne comptez pas l'utiliser.

4 votes

Déclarer $items = array(); avant foreach n'est même pas nécessaire, n'est-ce pas ? php va juste créer un tableau vide

0 votes

Que se passe-t-il si certains des $username sont 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.

15voto

Sjoerd Points 34671

Utilisez

$items[] = $username;

9 votes

Assurez-vous juste $items = array(); apparaît avant la boucle.

0 votes

Pouvez-vous m'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 ça fonctionne toujours. Est-il préférable de l'ajouter ou n'est-il pas nécessaire de le faire ?

0 votes

8voto

Dogbert Points 44003

Essayez

$items = array_values ( $group_membership );

1 votes

Je suppose que la boucle foreach fait plus que ça, sinon c'est la meilleure solution.

8voto

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

3 votes

Pas besoin du truc $count. Il suffit de $array[] = $thing ;

0 votes

Je vais attendre avant de déclasser cette réponse bien que : 1. c'est une réponse qui ne concerne que le code et qui 2. enseigne aux développeurs des pratiques inutiles/mauvaises ... parce que c'est une grande chance de faire la chose disciplinée et de faire de Stackoverflow une meilleure ressource.

0 votes

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 vous l'avez suggéré a résolu mon problème.

2voto

Paper-bat Points 423

Vous pouvez 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 ça :

<?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 qui sont dans 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; 
} 
?>

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X