2011-07-25 7 views
9

Làm thế nào tôi có thể làm một array_merge trên một mảng kết hợp, như vậy:Mảng-Merge trên một mảng kết hợp trong PHP

Mảng 1:

$options = array (
"1567" => "test", 
"1853" => "test1", 
); 

Mảng 2:

$option = array (
"none" => "N/A" 
); 

Vì vậy, tôi cần array_merge hai nhưng khi tôi làm tôi nhận được điều này (trong gỡ lỗi):

Array 
(
    [none] => N/A 
    [0] => test 
    [1] => test1 
) 
+0

_ "[Giá trị trong mảng đầu vào bằng các phím số sẽ được đổi số với các phím gia tăng bắt đầu từ số không trong mảng kết quả.] (Http://php.net/manual/en/function.array-merge.php) "_. Nếu bạn có thể thay đổi các phím mảng '$ options' để chứa một số chuỗi, thì [nó sẽ hoạt động tốt] (http://codepad.org/d5DbFdas). – Shef

+0

@Shef: Bạn nên đề cập đến: Chuỗi không phải số. – hakre

Trả lời

12

hãy thử sử dụng:

$ finalArray = $ tùy chọn + $ option .see http://codepad.org/BJ0HVtac Ju st kiểm tra hành vi cho các phím trùng lặp, tôi đã không kiểm tra điều này. Đối với các phím duy nhất, nó hoạt động tuyệt vời.

<?php 

$options = array (
        "1567" => "test", 
        "1853" => "test1", 
       ); 


$option = array (
"none" => "N/A" 
); 


$final = array_merge($option,$options); 

var_dump($final); 


$finalNew = $option + $options ; 

var_dump($finalNew); 

?> 
+1

Đây là cách php xử lý các khóa trùng lặp: http://codepad.org/jpeynFf1 – NickSoft

+1

Cũng nên nhớ rằng sau khi hợp nhất các phím sẽ là "0" và "1". array_merge() chức năng reset các phím số! – ram4nd

0

khi array_merge không hoạt động, sau đó chỉ cần làm

<?php 
$new = array(); 
foreach ($options as $key=>$value) $new[$key] = $value; 
foreach ($option as $key=>$value) $new[$key] = $value; 
?> 

hoặc chuyển hai foreach vòng tùy thuộc vào mảng có ưu tiên cao hơn

1

tôi đã tìm cách để hợp nhất hai mảng kết hợp với nhau, thêm các giá trị cùng nhau nếu các phím giống nhau. Nếu có các khóa duy nhất cho một trong hai mảng, chúng sẽ được thêm vào mảng được hợp nhất với các giá trị hiện tại của chúng.

tôi couldnt tìm thấy một chức năng để làm điều này, vì vậy làm này:

function array_merge_assoc($array1, $array2) 
{ 

    if(sizeof($array1)>sizeof($array2)) 
    { 
     echo $size = sizeof($array1); 
    } 
    else 
    { 
     $a = $array1; 
     $array1 = $array2; 
     $array2 = $a; 

     echo $size = sizeof($array1); 
    } 

    $keys2 = array_keys($array2); 

    for($i = 0;$i<$size;$i++) 
    { 
     $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]]; 
    } 

    $array1 = array_filter($array1); 
    return $array1; 
} 

tham khảo: http://www.php.net/manual/en/function.array-merge.php#90136

11

Chỉ cần sử dụng $options + $option!

var_dump($options + $option); 

kết quả đầu ra:

array(3) { 
    [1567]=> 
    string(4) "test" 
    [1853]=> 
    string(5) "test1" 
    ["none"]=> 
    string(3) "N/A" 
} 

Nhưng hãy cẩn thận khi có một vụ va chạm then chốt. Dưới đây là những gì các PHP manual nói:

Các khóa từ mảng đầu tiên sẽ được giữ nguyên. Nếu một khóa mảng tồn tại trong cả hai mảng, thì phần tử từ mảng đầu tiên sẽ được sử dụng và phần tử của khóa khớp từ mảng thứ hai sẽ bị bỏ qua.

1
$final_option = $option + $options; 
0

Mã này có thể được sử dụng để kết hợp đệ quy:

function merge($arr1, $arr2){ 
     $out = array(); 
     foreach($arr1 as $key => $val1){ 
      if(isset($arr2[$key])){ 
       if(is_array($arr1[$key]) && is_array($arr2[$key])){ 
        $out[$key]= merge($arr1[$key], $arr2[$key]); 
       }else{ 
        $out[$key]= array($arr1[$key], $arr2[$key]); 
       } 
       unset($arr2[$key]); 
      }else{ 
       $out[$key] = $arr1[$key]; 
      } 
     } 
     return $out + $arr2; 
} 
0

Nếu mảng có cùng một phím sau đó sử dụng array_merge_recursive()

$array1 = array("a" => "1" , "b" => "45"); 

$array2 = array("a" => "23" , "b" => "33"); 

$newarray = array_merge_recursive($array1,$array2); 

Các array_merge_recursive() sẽ không ghi đè lên, nó chỉ làm cho giá trị như một mảng.