¿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);

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);

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


7

Tratar

$items = array_values ( $group_membership );

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

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. :)


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

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

Solo prueba lo anterior en tu código.


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);

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.