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.

Phil
fuente

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);
ThiefMaster
fuente
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];
Mohyaddin Alaoddin
fuente
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);
moe
fuente
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);
Miguel
fuente
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

maximran
fuente