簡體   English   中英

php數組使用多維數組合並鍵

[英]php array merge on key using multidimensional array

這是我的陣列:

array 
  0 => 
    array 
      'id' => int 220950
      'order_reference' => string '600125479' 
  1 => 
    array 
      'id' => int 220985
      'order_reference' => string '498638' 

這是我的另一個陣列

array 
      0 => 
        array 
          'entity_id' => 1
          'order_status' => 'test' 
      1 => 
        array 
          'entity_id' => 2
          'order_status' => 'test2' 

我的目標是實現這個目標:

array 
      0 => 
        array 
          'id' => int 220950
          'order_reference' => string '600125479'
          'entity_id' => 1
          'order_status' => 'test' 
      1 => 
        array 
          'id' => int 220985
          'order_reference' => string '498638'
          'entity_id' => 2
          'order_status' => 'test2'

使用array_merge我設法得到這個(不是我想要的目標),這就是我在stackoverflow和其他論壇上發現的:

array 
      0 => 
        array 
          'id' => int 220950
          'order_reference' => string '600125479' 
      1 => 
        array 
          'id' => int 220985
          'order_reference' => string '498638' 
         array 
      2 => 
        array 
          'entity_id' => 1
          'order_status' => 'test'
      3 => 
        array 
          'entity_id' => 2
          'order_status' => 'test2'

歡迎任何想法或建議:)謝謝

使用foreach我可以添加鍵值,但我正在尋找一種更干凈的方式:)

有一點需要注意,你的數組沒有一個聯合值可以比較,所以你需要確保鍵總是排成一行,我認為像這樣的循環可以解決這個問題:

for ($i = 0; $i < count($array1); $i++)
{
    $new_array[] = array_merge($array1[$i], $array2[$i]);
}

編輯:您也可以使用array_map()但它不提供任何性能優勢AFAIK,並且整體可讀性較差。

$new_array = array_map(function($a1_v, $a2_v) { return array_merge($a1_v, $a2_v); }, $a1, $a2);

以下是使用array_maparray_merge_recursive解決問題的答案。

<?php

$array1 = array(
    [
        "id" => 220950,
        "order_reference" => "600125479"
    ],
    [
        "id" => 220985,
        "order_reference" => "498638"
    ]
);

$array2 = array(
    [
        "entity_id" => 1,
        "order_status" => "test"
    ],
    [
        "entity_id" => 2,
        "order_status" => "test"
    ]
);

$results = array();

array_map(function($array1, $array2) use (&$results) {

    $results[] = array_merge_recursive($array1, $array2);

}, $array1, $array2);

var_dump($results);

這將輸出:

array (size=2)
  0 => 
    array (size=4)
      'id' => int 220950
      'order_reference' => string '600125479' (length=9)
      'entity_id' => int 1
      'order_status' => string 'test' (length=4)
  1 => 
    array (size=4)
      'id' => int 220985
      'order_reference' => string '498638' (length=6)
      'entity_id' => int 2
      'order_status' => string 'test' (length=4)

array_mergearray_map一起使用

    $array1 = array(
    [
        "id" => 220950,
        "order_reference" => "600125479"
    ],
    [
        "id" => 220985,
        "order_reference" => "498638"
    ]
);

$array2 = array(
    [
        "entity_id" => 1,
        "order_status" => "test"
    ],
    [
        "entity_id" => 2,
        "order_status" => "test2"
    ]
);

$result = array_map("array_merge",$array1,$array2);
print_r($result);

產量

    Array
(
    [0] => Array
        (
            [id] => 220950
            [order_reference] => 600125479
            [entity_id] => 1
            [order_status] => test
        )

    [1] => Array
        (
            [id] => 220985
            [order_reference] => 498638
            [entity_id] => 2
            [order_status] => test2
        )

)

工作實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM