2011-12-19 43 views
9

Tôi có hai mảng, tôi muốn kết hợp hai mảng này thành mảng đơn. Xin vui lòng xem chi tiết dưới đây:php hợp nhất hai mảng

Đầu tiên Array:

Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 2 
      [c] => 3 
     ) 

    [1] => Array 
     (
      [a] => 3 
      [b] => 2 
      [c] => 1 
     ) 
) 

Thứ hai mảng:

Array 
(
    [0] => Array 
     (
      [d] => 4 
      [e] => 5 
      [f] => 6 
     ) 

    [1] => Array 
     (
      [d] => 6 
      [e] => 5 
      [f] => 4 
     ) 
) 

Tôi muốn kết quả này. Có ai biết làm thế nào để làm điều này?

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [1] => Array 
     (
      [0] => 3 
      [1] => 2 
      [2] => 1 
     ) 
    [2] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 

    [3] => Array 
     (
      [0] => 6 
      [1] => 5 
      [2] => 4 
     ) 
) 

Hy vọng bạn đã hiểu câu hỏi. Cảm ơn bạn trước.

+4

Có điều gì sai với việc sử dụng [array_merge] (http://php.net/array_merge)? –

+0

@JonStirling Có nếu bạn muốn kết quả OP chỉ định vì điều đó sẽ bảo toàn các khóa của mảng ban đầu. Lưu ý câu trả lời của ông có các chỉ mục dựa trên 0 cho các mảng phụ của mình. Cho dù đó là kết quả anh ta cần hay không chỉ anh ta có thể trả lời! – liquorvicar

+0

Tôi không thấy sự cố với array_merge. Có vẻ như OP: http://codepad.org/Bf5VpZOr – PiTheNumber

Trả lời

3

FIXED (một lần nữa)

function array_merge_to_indexed() { 
    $result = array(); 

    foreach (func_get_args() as $arg) { 
     foreach ($arg as $innerArr) { 
      $result[] = array_values($innerArr); 
     } 
    } 

    return $result; 
} 

Chấp nhận một số lượng không giới hạn của mảng đầu vào, kết hợp tất cả các mảng tiểu vào một container như mảng lập chỉ mục, và trả về kết quả .

EDIT 03/2014: Cải thiện khả năng đọc và hiệu quả

+1

Điều này bảo toàn các khóa gốc từ các mảng không phải là kết quả mà anh ta tìm kiếm (ít nhất không phải từ dữ liệu trong câu hỏi). – liquorvicar

+1

@liquorvicar Không, nó không phải là điểm của hàm, nếu không tôi sẽ chỉ nói "sử dụng array_merge()". Tôi đã sử dụng '[]' để chuyển đổi thành lập chỉ mục, mặc dù 'array_values ​​()' của bạn không có cách tiếp cận vòng lặp cuối cùng được cho là tốt hơn. – DaveRandom

+1

Ah ok, tôi đã chạy mã của bạn và nó đã không làm việc cho tôi, nhưng nhìn vào bài chỉnh sửa của bạn nó phải có được một phiên bản cũ mà tôi chạy. – liquorvicar

1

Nếu bạn muốn trả lại kết quả chính xác mà bạn chỉ định trong câu hỏi của bạn sau đó một cái gì đó như thế này sẽ làm việc

function array_merge_no_keys() { 
    $result = array(); 
    $arrays = func_get_args(); 
    foreach($arrays as $array) { 
     if(is_array($array)) { 
      foreach($array as $subArray) { 
       $result[] = array_values($subArray); 
      } 
     } 
    } 
    return $result; 
} 
0

array_merge hiện Bí quyết:

$a = array(array(1,2,3), array(3,2,1)); 
$b = array(array(4,5,6), array(6,5,4)); 
var_dump(array_merge($a, $b)); 

Hãy thử nó: 012.342.

Chính xác kết quả mong muốn.

+0

Nhưng đó không phải là dữ liệu mà OP đang sử dụng. Trong các mảng con đầu vào, các khóa là các liên kết (các chữ cái đơn) và các mảng kết quả mà chúng đang sử dụng một chỉ mục dựa trên 0. – liquorvicar

+0

vâng tôi biết array_merge thực hiện thủ thuật trong '$ a = mảng (mảng (1,2,3), mảng (3,2,1)); $ b = mảng (mảng (4,5,6), mảng (6,5,4)); var_dump (mảng_merge ($ a, $ b)); ' nhưng KHÔNG CÓ TRONG MÃ MY. –

+0

ahh, tôi biết rồi! Everbody cứ nói kết quả là sai nhưng nó là đầu vào. Xin lỗi vì điều đó. – PiTheNumber

0

Bạn cũng có thể sử dụng: array_merge_recursive; cho mảng đa chiều.

<?php 
    $ar1 = array("color" => array("favorite" => "red"), 5); 
    $ar2 = array(10, "color" => array("favorite" => "green", "blue")); 
    $result = array_merge_recursive($ar1, $ar2); 
    print_r($result); 
?> 

Kết quả:

Array(
    [color] => Array 
     (
      [favorite] => Array 
       (
        [0] => red 
        [1] => green 
       ) 

      [0] => blue 
     ) 

    [0] => 5 
    [1] => 10 
) 

Nguồn: PHP Manual.

3

cách đơn giản hơn và hiện đại là:

$merged = $array1 + ['apple' => 10, 'orange' => 20] + ['cherry' => 12, 'grape' => 32]; 

cú pháp mảng mới từ php 5.4

Các vấn đề liên quan