Agregar un elemento a una matriz asociativa


88
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

Esto no funciona ya que reemplaza el valor de los datos. Sin embargo, ¿cómo puedo hacer que agregue un valor asociativo en cada bucle? $file_dataes una matriz de datos que tiene un tamaño dinámico.

Respuestas:


96

Creo que quieres $data[$category] = $question;

O en caso de que desee una matriz que asigne categorías a una serie de preguntas:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);

9
Sin embargo, otros programadores lo odiarán por los errores tipográficos, ya que también se verán obligados a hacerlo o corregirlos.
— ThiefMaster

Estaba demasiado cómodo con array_push, ¡olvidé lo básico! ¡De mucha ayuda!
— CLOUGH

121

Simplemente puedes hacer esto

$data += array($category => $question);

Si está ejecutando php 5.4+

$data += [$category => $question];

21
que en el mundo
— Phil

9
Esta es la respuesta correcta para agregar elementos a una matriz asociativa.
— andreszs

7
Agregue también varios elementos: $ data + = ['x' => 1, 'y' => 2];
— split19

esta es la forma si no desea terminar con más de un objeto dentro de la matriz
— DragonFire

Nota: esto puede funcionar si su matriz aún no tiene un elemento con la misma clave, por lo que no puede sobrescribir un elemento existente.
— Mohamad Hamouday

29

antes de bucle:

$data = array();

luego en tu bucle:

$data[] = array($catagory => $question);

2
Si lo hace de esa manera, no olvide iniciar la matriz primero usando $ data = array (); o php lanzará un aviso
— Alex Bailey

Creo que SO almacena en caché mi respuesta, tan pronto como la publiqué, me di cuenta de que no vi que se inicializara en su código. Así que lo agregué y vi tu comentario después, gracias :-)
— moe

4
Esto no funcionó porque hizo una matriz dentro de la matriz. Lo siento si mi pregunta te atraviesa un poco.
— Phil

PHP 5.4+ puede escribir un poco menos de código:$data=[]; $data[] = [$category => $question];
— Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];falla con un índice indefinido: foo in .. , pero el signo más sugerido debajo funciona.
— qrtLs

7

Sé que esta es una pregunta antigua, pero puedes usar:

array_push($data, array($category => $question));

Esto empujará arrayal final de su corriente array. O si solo está tratando de agregar valores únicos al final de su matriz, no más matrices, puede usar esto:

array_push($data,$question);

6

Para cualquiera que también necesite agregar a una matriz asociativa 2d, también puede usar la respuesta dada anteriormente y usar el código como este

 $data[$category]["test"] = $question

luego puede llamarlo (para probar el resultado mediante:

echo $data[$category]["test"];

que debería imprimir $ pregunta

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.