Envie o item para a matriz associativa em PHP

93

Tenho tentado empurrar um item para uma matriz associativa como esta:

$new_input['name'] = array(
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true
);
array_push($options['inputs'], $new_input);

No entanto, em vez de 'nome' como a tecla, adiciona um número. tem outro jeito de fazer isto?

Ryudice
fonte
Não é possível enviar um array para outro array. Eu tentei todas essas opções e a mesclagem apenas adicionou a matriz. Resolvi meu problema com uma classe.
Alex Benincasa Santos

Respostas:

132
$options['inputs']['name'] = $new_input['name'];
webbiedave
fonte
62

Em vez de array_push () , use array_merge ()

Ele irá mesclar dois arrays e combinar seus itens em um único array.

Código de exemplo -

$existing_array = array('a'=>'b', 'b'=>'c');
$new_array = array('d'=>'e', 'f'=>'g');

$final_array=array_merge($existing_array, $new_array);

Ele retorna a matriz resultante no final_array. E os resultados da matriz resultante serão -

array('a'=>'b', 'b'=>'c','d'=>'e', 'f'=>'g')

Reveja este link para estar ciente de possíveis problemas.

Murtaza Khursheed Hussain
fonte
1
na verdade, deve ser $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ existing_array, $ new_array);
Calvin Chan
1
bem, é um bom senso coletar saída. Eu estava apenas dando a ideia. Atenciosamente
Murtaza Khursheed Hussain
17

Esta é uma função legal

function array_push_assoc($array, $key, $value){
   $array[$key] = $value;
   return $array;
}

Apenas use

$myarray = array_push_assoc($myarray, 'h', 'hello');

Créditos e explicação

Ajmal Salim
fonte
7

A solução da WebbieDave funcionará. Se você não quiser sobrescrever nada que já esteja em 'nome', você também pode fazer algo assim:

$options['inputs']['name'][] = $new_input['name'];

Curtis
fonte
Isso não funciona se você não quiser manter tudo associativo, por exemplo, sem inserir outras matrizes numeradas no meio. Dê uma olhada em @Steven H abaixo
brianlmerritt
4

Ele $new_inputpode conter mais do que apenas um elemento de 'nome' que você pode querer usar array_merge.

$new_input = array('name'=>array(), 'details'=>array());
$new_input['name'] = array('type'=>'text', 'label'=>'First name'...);
$options['inputs'] = array_merge($options['inputs'], $new_input);
tetaiko
fonte
3

A resposta de Curtis foi muito próxima do que eu precisava, mas mudei um pouco.

Onde ele usou:

$options['inputs']['name'][] = $new_input['name'];

Eu usei:

$options[]['inputs']['name'] = $new_input['name'];

Este é meu código real usando uma consulta de um banco de dados:

while($row=mysql_fetch_array($result)){ 
    $dtlg_array[]['dt'] = $row['dt'];
    $dtlg_array[]['lat'] = $row['lat'];
    $dtlg_array[]['lng'] = $row['lng'];
}

Obrigado!

Steven H
fonte
3

eu uso php5.6

código :

$person = ["name"=>"mohammed", "age"=>30];

$person['addr'] = "Sudan";

print_r($person) 

resultado

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )
ebnibrahem
fonte
2

Basta alterar alguns snippet (use a função array_merge): -

  $options['inputs']=array_merge($options['inputs'], $new_input);
vinha
fonte
1
$new_input = array('type' => 'text', 'label' => 'First name', 'show' => true, 'required' => true);
$options['inputs']['name'] = $new_input;
Ryan Kinal
fonte
1

Existe uma maneira melhor de fazer isso:

Se o array $ arr_options contém o array existente.

$arr_new_input['name'] = [
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true
];

$arr_options += $arr_new_input;

Aviso: $ arr_options deve existir. se $ arr_options já tiver um ['nome'], ele será sobrescrito.

Espero que isto ajude.

Henry
fonte
0

Podes tentar.

$options['inputs'] = $options['inputs'] + $new_input;
Adnan Ahmad
fonte
0

Você pode usar array_merge ($ array1, $ array2) para mesclar o array associativo. Exemplo:

$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));

Resultado:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Mamun Sabuj
fonte