Adicionar um item a uma matriz associativa


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

}

Isso não está funcionando, pois substitui o valor dos dados. Como posso fazer com que ele adicione um valor associativo a cada loop? $file_dataé uma matriz de dados de tamanho dinâmico.

Respostas:


96

Eu acho que você quer $data[$category] = $question;

Ou no caso de você desejar uma matriz que mapeie categorias para uma série de perguntas:

$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
Outros programadores irão odiar você por erros de digitação, já que serão forçados a cometê-los também ou corrigi-los.
ThiefMaster

Eu estava muito confortável com array_push, esqueci o básico! Realmente util!
CLOUGH

121

Você pode simplesmente fazer isso

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

Se você estiver executando em php 5.4+

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

21
o que no mundo?
Phil,

9
Esta é a resposta correta para adicionar itens a uma matriz associativa.
andreszs

7
Adicione vários elementos também: $ data + = ['x' => 1, 'y' => 2];
divisão

este é o caminho se você não quiser acabar com mais de um objeto dentro do array
DragonFire,

Nota: isso pode funcionar se o seu array ainda não tiver um elemento com a mesma chave, então ele não pode sobrescrever um elemento existente.
Mohamad Hamouday

29

antes do loop:

$data = array();

então em seu loop:

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

2
Se você fizer isso dessa forma, não se esqueça de iniciar o array primeiro usando $ data = array (); ou então o php lançará um aviso
Alex Bailey

Acho que o SO armazena minha resposta em cache, assim que postei, percebi que não a vi sendo inicializada em seu código. Então eu adicionei e vi seu comentário depois, obrigado :-)
moe

4
Isso não funcionou porque criou uma matriz dentro da matriz. Desculpe se a minha pergunta meio que através de você.
Phil

PHP 5.4+ você pode escrever um pouco menos código:$data=[]; $data[] = [$category => $question];
Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];falha com índice indefinido: foo in .. , mas o sinal de mais sugerido abaixo funciona.
qrtLs

7

Eu sei que esta é uma pergunta antiga, mas você pode usar:

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

Isso empurrará o arraypara o fim de sua corrente array. Ou se você está apenas tentando adicionar valores únicos ao final de sua matriz, não mais matrizes, então você pode usar isto:

array_push($data,$question);

6

Para qualquer um que também precise adicionar em 2d array associativo, você também pode usar a resposta dada acima e usar o código como este

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

você pode então chamá-lo (para testar o resultado:

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

que deve imprimir $ question

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.