Agregar un elemento a una matriz asociativa

3 minutos de lectura

avatar de usuario
phil

//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 ciclo? $file_data es una matriz de datos que tiene un tamaño dinámico.

avatar de usuario
Mohyaddin Alaodín

Simplemente puedes hacer esto

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

Si está ejecutando en php 5.4+

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

  • Esta es la respuesta correcta para agregar elementos a una matriz asociativa.

    – andreszs

    18 de diciembre de 2017 a las 16:09

  • Agregue también varios elementos: $datos += [‘x’ => 1, ‘y’ => 2];

    – split19

    31 de enero de 2019 a las 16:13

  • esta es la forma si no quiere terminar con más de un objeto dentro de la matriz

    – Fuego de Dragon

    7 de abril de 2020 a las 8:45

  • 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

    3 de mayo de 2020 a las 14:06


avatar de usuario
ladrónmaestro

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

O en caso de que desee una matriz que asigne categorías a una matriz 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);

  • Otros programadores te odiarán por los errores tipográficos, ya que también se verán obligados a hacerlo o corregirlos.

    – ThiefMaster

    22 de marzo de 2011 a las 0:01

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

    – CLOUGH

    26 de marzo de 2018 a las 9:30

avatar de usuario
moe

antes del bucle:

$data = array();

luego en tu bucle:

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

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

    – Alex Bailey

    21 de marzo de 2011 a las 23:14


  • 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

    21 de marzo de 2011 a las 23:15

  • Esto no funcionó porque hizo una matriz dentro de la matriz. Lo siento si mi pregunta un poco a través de ti.

    – Phil

    21 de marzo de 2011 a las 23:27

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

    – Justin

    20 de marzo de 2014 a las 21:05


  • esto se agrega a la matriz pero como un objeto separado

    – Fuego de Dragon

    11 de abril de 2020 a las 7:22

avatar de usuario
Miguel

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

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

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

array_push($data,$question);

Para cualquier persona 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

¿Ha sido útil esta solución?