array_push () com par de valores-chave

184

Eu tenho uma matriz existente à qual quero adicionar um valor.

Estou tentando conseguir isso array_push()sem sucesso.

Abaixo está o meu código:

$data = array(
    "dog" => "cat"
);

array_push($data['cat'], 'wagon');

O que eu quero alcançar é adicionar gato como uma chave ao $dataarray com vagão como valor, para acessá-lo como no trecho abaixo:

echo $data['cat']; // the expected output is: wagon

Como posso conseguir isso?

mistero
fonte

Respostas:

334

Então, e quanto a ter:

$data['cat']='wagon';
dusoft
fonte
Aviso: $a['123'] = 456;- a string '123' é convertida na chave inteira 123.
bancer
Para chaves inteiras, você não deseja agrupá-las em aspas / string.
dusoft 8/07
Não necessariamente. Se algumas outras chaves forem strings como '123a', pode ser desejável preservar as chaves de strings para todos os itens.
bancer 13/07
51

Se você precisar adicionar várias chaves => valor, tente isso.

$data = array_merge($data, array("cat"=>"wagon","foo"=>"baar"));
Harijs Krūtainis
fonte
1
Também pode usar um loop para isso.
21418 Jack Perry
Um loop não ajuda. Se você deseja enviar valores com um nome de chave duplicado, você deve usar array_merge.
Richard Smith
38
$data['cat'] = 'wagon';

É tudo o que você precisa para adicionar a chave e o valor à matriz.

rogeriopvl
fonte
6

Por exemplo:

$data = array('firstKey' => 'firstValue', 'secondKey' => 'secondValue');

Para alterar o valor da chave:

$data['firstKey'] = 'changedValue'; 
//this will change value of firstKey because firstkey is available in array

resultado:

Matriz ([firstKey] => modifiedValue [secondKey] => secondValue)

Para adicionar um novo par de valores-chave:

$data['newKey'] = 'newValue'; 
//this will add new key and value because newKey is not available in array

resultado:

Matriz ([firstKey] => firstValue [secondKey] => secondValue [newKey] => newValue)

Prince Patel
fonte
5

Você não precisa usar a função array_push (), pode atribuir um novo valor com a nova chave diretamente à matriz, como ..

$array = array("color1"=>"red", "color2"=>"blue");
$array['color3']='green';
print_r($array);


Output:

   Array(
     [color1] => red
     [color2] => blue
     [color3] => green
   )
Deepak Vaishnav
fonte
Você também deve destacar o que é a diferença exata, aqui você usou = em vez de, por OP
NitinSingh
1
Este código está errado. array_push utiliza dois parâmetros e você receberá um aviso sobre o fato de estar usando errado, com o resultado de que a chamada para array_push não faz nada. O que a segunda linha do seu código está realmente fazendo é simplesmente $array['color3']='green'. Foi exatamente o que a @dusoft fez acima. Seu código é apenas uma ofuscação dessa solução.
Richard Smith
@ RichardSmith obrigado por mostrar meu erro, mudei minha resposta. :)
Deepak Vaishnav
0

Matriz ['chave'] = valor;

$data['cat'] = 'wagon';

Isto é o que você precisa. Não é necessário usar a função array_push () para isso. Algum tempo o problema é muito simples e pensamos de maneira complexa :).

Mr-Faizan
fonte
-3

Apenas faça isso:

$data = [
    "dog" => "cat"
];

array_push($data, ['cat' => 'wagon']);

* No php 7 e superior, o array está criando usando [], não ()

xayer
fonte
Dois problemas: array_pushadiciona seus parâmetros 2ª + como novos valores (pares não chave-valor como array_mergefaz), e PHP 7 felizmente aceita a array()sintaxe de array (bem como a taquigrafia []sintaxe)
Chris Forrence