Como armazenar valores de loop foreach em uma matriz?

115

Precisa armazenar valores de foreach loop em um array, precisa de ajuda para fazer isso.

O código abaixo não funciona, apenas armazena o último valor, tentado, $items .= ...,mas também não está funcionando, qualquer ajuda será apreciada.

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

print_r($items);
Brad
fonte
12
.=acrescenta texto. []anexa em uma matriz.
Skilldrick de
De longe, Skilldrick acertou em cheio com o forro acima, sem necessidade de prosseguir.
user1946891

Respostas:

255

Declare a $itemsmatriz fora do loop e use $items[]para adicionar itens à matriz:

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

print_r($items);
Andy E
fonte
7
Além disso, não extraia a chave ( $i) se não for usá-la.
Matteo Riva
2
Declarar $items = array();antes do foreach nem é necessário, certo? php irá apenas criar uma matriz vazia
BassMHL
o que aconteceria se alguns dos $ username fossem nulos? Temos uma situação semelhante em que os registros vêm de uma API e, de alguma forma, acabamos com alguns registros nulos no array.
pixelwiz de
14

Usar

$items[] = $username;
Sjoerd
fonte
7
Apenas certifique-se de que $items = array();aparece antes do loop.
Skilldrick de
Você pode ajudar a explicar por que você deve declarar $ items = array (); antes do loop. Eu fiz algo assim, não declarei e ainda funciona. É melhor adicioná-lo ou não é obrigatório?
robk27,
Confira @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur
7

Experimentar

$items = array_values ( $group_membership );
Dogbert
fonte
1
Bem, suponho que o loop foreach está fazendo mais do que isso, caso contrário, esta é a melhor solução.
Matteo Riva
5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>
sushil bharwani
fonte
3
Não há necessidade de coisas de $ count. Apenas $ array [] = $ coisa;
Vou adiar a votação desta resposta, embora: 1. É uma resposta apenas de código que 2. Ensina aos desenvolvedores práticas desnecessárias / ruins ... porque esta é uma grande chance de fazer a coisa Disciplinada e tornar Stackoverflow um recurso melhor .
mickmackusa
Eu tenho problema onde meu array retorna apenas o último elemento que foi colocado no array. Usar a contagem sugerida por você resolveu meu problema.
Jass Preet
2

Você pode tentar fazer minha resposta,

você escreveu isto:

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

print_r($items);
?>

E no seu caso eu faria isso:

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

Como você mostra em sua pergunta, parece que você precisa de uma matriz de nomes de usuário que estão em um grupo específico :) Neste caso, eu prefiro uma boa consulta sql com um loop while simples;)

<?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é mais rápido, mas o último exemplo é apenas o resultado de uma observação. :)

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

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

Apenas tente o acima em seu código.

Caso curioso
fonte
Esta resposta apenas de código não deve ser usada por nenhum desenvolvedor. O contador e o incremento não são necessários.
mickmackusa
0

Só para evitar muitos erros de digitação:

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

esta questão parece muito antiga, mas caso você passe por ela, você pode usar a função embutida do PHP array_push () para enviar dados em um array usando o exemplo abaixo.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>
Adeojo Emmanuel IMM
fonte
Fazer chamadas de função iteradas é ineficiente. A sintaxe de envio de colchetes (sugerida 8 anos antes) será mais eficiente. Essa resposta não deve ser usada para inserir elementos únicos em uma matriz. (e a declaração de $ié inútil)
mickmackusa