Sposta l'elemento nell'array associativo in PHP


92

Ho provato a inviare un elemento a un array associativo come questo:

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

Tuttavia, invece di "nome" come chiave, aggiunge un numero. C'è un altro modo per farlo?


Non è possibile inserire un array in un altro array. Ho provato tutte queste opzioni e l'unione ha appena aggiunto l'array. Ho risolto il mio problema con una classe.
Alex Benincasa Santos

Risposte:



62

Invece di array_push () , usa array_merge ()

Unirà due array e combinerà i loro elementi in un unico array.

Codice di esempio -

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

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

Restituisce l'array risultante in final_array. E i risultati della matrice risultante saranno:

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

Si prega di rivedere questo collegamento , per essere consapevoli di possibili problemi.


1
in realtà dovrebbe essere $ array_esistente = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ risultato = array_merge ($ array_esistente, $ nuovo_array);
Calvin Chan

1
bene è un buon senso raccogliere l'output. Stavo solo dando l'idea. Saluti
Murtaza Khursheed Hussain

17

Questa è una funzione interessante

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

Basta usare

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

Crediti e spiegazioni


7

La soluzione di WebbieDave funzionerà. Se non vuoi sovrascrivere nulla che potrebbe essere già in "nome", puoi anche fare qualcosa del genere:

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


Questo non funziona se non si desidera mantenere tutto associativo, ad esempio senza inserire altri array numerati nel mezzo. Dai un'occhiata a @Steven H di seguito
brianlmerritt

4

If $new_inputpuò contenere più di un semplice elemento "nome" che potresti voler usare 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);

3

La risposta di Curtis era molto vicina a ciò di cui avevo bisogno, ma l'ho modificata un po '.

Dove ha usato:

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

Ero solito:

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

Ecco il mio codice effettivo utilizzando una query da un DB:

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

Grazie!


3

Io uso php5.6

codice :

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

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

print_r($person) 

produzione

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

2

Cambia solo qualche frammento (usa la funzione array_merge): -

  $options['inputs']=array_merge($options['inputs'], $new_input);

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

1

C'è un modo migliore per farlo:

Se l'array $ arr_options contiene l'array esistente.

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

$arr_options += $arr_new_input;

Attenzione: $ arr_options deve esistere. se $ arr_options ha già un ['nome'] verrà sovrascritto.

Spero che sia di aiuto.


0

Puoi provare.

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

0

È possibile utilizzare array_merge ($ array1, $ array2) per unire l'array associativo. Esempio:

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

Produzione:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.