Đẩy mục vào mảng kết hợp trong PHP


92

Tôi đã cố gắng đẩy một mục vào một mảng liên kết như thế này:

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

Tuy nhiên, thay vì 'tên' như phím trong sẽ thêm một số. Có cách nào khác để làm điều đó không?


Không thể đẩy mảng này sang mảng khác. Tôi đã thử tất cả các tùy chọn này và hợp nhất chỉ thêm mảng. Tôi đã giải quyết vấn đề của mình với một Lớp học.
Alex Benincasa Santos

Câu trả lời:



62

Thay vì array_push () , hãy sử dụng array_merge ()

Nó sẽ hợp nhất hai mảng và kết hợp các mục của chúng trong một mảng duy nhất.

Mã mẫu -

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

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

Nó trả về mảng kết quả trong final_array. Và kết quả của mảng kết quả sẽ là:

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

Vui lòng xem lại liên kết này , để biết các vấn đề có thể xảy ra.


1
thực ra nó phải là $ current_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ current_array, $ new_array);
Calvin Chan

1
cũng là một lẽ thường tình để thu thập sản lượng. Tôi chỉ đưa ra ý tưởng. Lời chúc mừng
Murtaza Khursheed Hussain

17

Đây là một chức năng thú vị

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

Chỉ dùng

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

Tín dụng & Giải thích


7

Giải pháp của WebbieDave sẽ hoạt động. Nếu bạn không muốn ghi đè lên bất kỳ thứ gì có thể đã có ở 'name', bạn cũng có thể làm như sau:

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


Điều này không hiệu quả nếu bạn không muốn giữ mọi thứ liên kết, ví dụ như không đẩy các mảng được đánh số khác vào giữa. Có một cái nhìn tại @Steven H dưới đây
brianlmerritt

4

Nếu $new_inputcó thể chứa nhiều hơn một phần tử 'tên' mà bạn có thể muốn sử dụng 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

Câu trả lời của Curtis rất gần với những gì tôi cần, nhưng tôi đã thay đổi nó một chút.

Nơi anh ấy sử dụng:

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

Tôi đã sử dụng:

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

Đây là mã thực tế của tôi bằng cách sử dụng truy vấn từ DB:

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

Cảm ơn!


3

tôi sử dụng php5.6

:

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

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

print_r($person) 

đầu ra

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

2

Chỉ cần thay đổi một vài đoạn mã (sử dụng hàm 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ó một cách tốt hơn để làm điều này:

Nếu mảng $ arr_options chứa mảng hiện có.

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

$arr_options += $arr_new_input;

Cảnh báo: $ arr_options phải tồn tại. nếu $ arr_options đã có ['name'] thì nó sẽ bị ghi đè.

Hi vọng điêu nay co ich.


0

Bạn co thể thử.

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

0

Bạn có thể sử dụng array_merge ($ array1, $ array2) để hợp nhất mảng kết hợp. Thí dụ:

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

Đầu ra:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.