在PHP中将项目推入关联数组

109

我一直在尝试像这样将项目推送到关联数组中:

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

然而,它不是使用“name”作为键添加一个数字。有没有其他方法可以做到这一点?


1
无法将一个数组推入另一个数组中。我尝试了所有的选项,但合并只是添加了该数组。我通过使用一个类解决了我的问题。 - Alex Benincasa Santos
12个回答

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

76

使用 array_merge() 代替 array_push()

它将合并两个数组并将它们的项组合成一个单独的数组。

示例代码 -

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

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

它返回最终数组中的结果数组。结果数组的结果将是 -

array('a'=>'b', 'b'=>'c','d'=>'e', 'f'=>'g')
请查看此链接,了解可能出现的问题。

2
实际上应该是: $existing_array = array('a'=>'b', 'b'=>'c'); $new_array = array('d'=>'e', 'f'=>'g');$result = array_merge($existing_array, $new_array); - Calvin Chan
1
收集输出是常识。我只是提供了这个想法。祝好。 - Murtaza Khursheed Hussain

24

这是一个很棒的函数

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

只需使用

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

致谢和解释


8

i use php5.6

code:

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

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

print_r($person) 

输出

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

7
WebbieDave的解决方案可行。如果您不想覆盖可能已经存在于'name'的任何内容,您也可以像这样做: $options ['inputs'] ['name'] [] = $new_input ['name'];

如果您不想保持所有关联,例如在其他编号的数组之间不插入,则此方法无法正常工作。请查看下面@Steven H的解决方案。 - brianlmerritt

5
如果$new_input可能包含不止一个'name'元素,您可能需要使用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

柯蒂斯的答案非常接近我所需,但我稍作更改。

他用了以下代码:

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

我使用了:

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

这是我使用数据库查询的实际代码:

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

谢谢!


2
只需更改几个片段(使用array_merge函数):
  $options['inputs']=array_merge($options['inputs'], $new_input);

1

有一种更好的方法来完成这个操作:

如果数组 $arr_options 包含现有的数组。

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

$arr_options += $arr_new_input;

警告:$arr_options 必须存在。如果 $arr_options 已经有 ['name'],它将被覆盖。

希望这可以帮助你。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接