¿Cómo almacenar valores de foreach loop en una matriz?

115

Necesita almacenar valores de cada bucle en una matriz, necesita ayuda para hacerlo.

El código a continuación no funciona, solo almacena el último valor, probado $items .= ...,pero eso tampoco funciona, se agradecerá cualquier ayuda.

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

print_r($items);
Puntilla
fuente
12
.=agrega texto. []se agrega a una matriz.
Skilldrick
De lejos, Skilldrick lo clavó con el revestimiento de arriba sin necesidad de ir más lejos.
user1946891

Respuestas:

255

Declare la $itemsmatriz fuera del bucle y use $items[]para agregar elementos a la matriz:

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

print_r($items);
Andy E
fuente
7
Además, no extraiga la clave ( $i) si no la va a utilizar.
Matteo Riva
2
Declarar $items = array();ante foreach ni siquiera es necesario, ¿verdad? php simplemente creará una matriz vacía
BassMHL
¿Qué pasaría si algunos de los $ username son nulos? Tenemos una situación similar en la que los registros provienen de una API y, de alguna manera, estamos terminando con algunos registros nulos en la matriz.
pixelwiz
14

Utilizar

$items[] = $username;
Sjoerd
fuente
7
Solo asegúrate de que $items = array();aparezca antes del bucle.
Skilldrick
¿Puede ayudarme a explicar por qué tiene que declarar $ items = array (); antes del bucle. Hice algo como esto y no lo declaré y todavía funciona. ¿Es mejor agregarlo o no es obligatorio?
robk27
Mira esto @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur
7

Tratar

$items = array_values ( $group_membership );
Dogbert
fuente
1
Bueno, supongo que el bucle foreach está haciendo más que eso, de lo contrario, esta es la mejor solución.
Matteo Riva
5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>
sushil bharwani
fuente
3
No hay necesidad de cosas de $ count. Solo $ matriz [] = $ cosa;
Voy a postergar la votación negativa de esta respuesta, aunque: 1. Es una respuesta de solo código que 2.Enseña a los desarrolladores prácticas innecesarias / malas ... porque esta es una gran oportunidad para hacer lo disciplinado y hacer de Stackoverflow un mejor recurso .
mickmackusa
Tengo un problema en el que mi matriz devuelve solo el último elemento que se insertó en la matriz. Usar el recuento como sugirió resolvió mi problema.
Jass Preet
2

Puedes intentar hacer mi respuesta

escribiste esto:

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

print_r($items);
?>

Y en tu caso yo haría esto:

<?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 muestra en su pregunta, parece que necesita una matriz de nombres de usuario que están en un grupo en particular :) En este caso, prefiero una buena consulta SQL con un bucle while simple;)

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

whilees más rápido, pero el último ejemplo es solo el resultado de una observación. :)

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

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

Solo prueba lo anterior en tu código.

Caso curioso
fuente
Ningún desarrollador debe utilizar esta respuesta de solo código. El contador y el incremento no son necesarios en absoluto.
mickmackusa
0

Solo para evitarle demasiados errores tipográficos:

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

esta pregunta parece bastante antigua, pero en caso de que la pase, puede usar la función incorporada de PHP array_push () para insertar datos en una matriz usando el siguiente ejemplo.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>
Adeojo Emmanuel IMM
fuente
Hacer llamadas a funciones iteradas es ineficaz. La sintaxis de inserción de llaves (sugerida 8 años antes) será más eficiente. Esta respuesta no debe usarse para insertar elementos individuales en una matriz. (y la declaración de $ies inútil)
mickmackusa