如何将项目插入现有数组

时间:2019-05-30 05:15:35

标签: php arrays multidimensional-array

假设我有以下两个数组

array:2 [
  0 => {#1995
    +"id": 6
    +"sales_target_amount": "30000.00"
  }
  1 => {#1996
    +"id": 10
    +"sales_target_amount": "1000.00"
  }
]

第二个数组

array:2 [
  0 => {#1994
    +"sales_total": "4165.80"
    +"staff_id": 6
  }
  1 => {#1513
    +"sales_total": "1335.60"
    +"staff_id": 10
  }
]

如果sales_target_amountid匹配,我试图将第一个数组staff_id插入第二个数组。

代码

  $sum = array_merge($second_array[],$firs_array);

上面的代码将两个数组合并在一起,但不会基于id插入项目。

预期结果

array:2 [
      0 => {#1994
        +"sales_total": "4165.80"
        +"staff_id": 6
        +"sales_target_amount": "30000.00"
      }
      1 => {#1513
        +"sales_total": "1335.60"
        +"staff_id": 10
        +"sales_target_amount": "1000.00"
      }
    ]

4 个答案:

答案 0 :(得分:2)

这是代码段,请参见内联文档以获取说明

$arr = [
    0 => ["sales_total" => "4165.80", "staff_id" => 6],
    1 => ["sales_total" => "1335.60", "staff_id" => 10],
];
$arr1 = [
    0 => ["id" => 6, "sales_target_amount" => "30000.00"],
    1 => ["id" => 10, "sales_target_amount" => "1000.00"],
];
//NULL to return complete arrays or objects and staff id will be key
$arr = array_column($arr, null, 'staff_id');
// mapping id sales target amount combination
$temp = array_column($arr1, 'sales_target_amount', 'id');
foreach ($arr as $key => $value) {
    $arr[$key]['sales_target_amount'] = $temp[$key]; // putting sales_target_amount for id
}

array_column —从输入数组的单个列中返回值

Demo Link

答案 1 :(得分:0)

使用哈希映射按staff_id分组值

<?php
$arr1 = [
    [
        'id' => 6,
        'sales_target_amount' => '30000.00'
    ],
    [
        'id' => 10,
        'sales_target_amount' => '1000.00'
    ]
];

$arr2 = [
    [
        'sales_total' => '4165.80',
        'staff_id' => 6
    ],
    [
        'sales_total' => '1335.60',
        'staff_id' => 10
    ]
];

$results = [];

foreach ($arr1 as $value) {
    $results[$value['id']] = [
        'sales_target_amount' => $value['sales_target_amount']
    ];
}

foreach ($arr2 as $value) {
    $results[$value['staff_id']] = array_merge($results[$value['staff_id']], $value);
}

print_r(array_values($results));

答案 2 :(得分:0)

array_merge()不适用于多维数组。 尝试使用array_merge_recursive()。

在这种情况下,您不需要使用方括号。 运行功能就像

$sum = array_merge_recursive($second_array, $firs_array);

答案 3 :(得分:0)

使用this library

对答案进行排序
$array = array_merge_recursive(
  Arr::flattenSingle(Arr::group($array1, 'id')), 
  Arr::flattenSingle(Arr::group($array2, 'staff_id'))
);

它的基本作用是首先根据要合并数组的列对数组进行分组。然后,由于组中的每个元素将只有一个对应的数组(因为它们按唯一的ID分组),因此将这些组展平以使用id => array_with_that_id之类的元素来构建数组。然后通过键(在这种情况下为id)合并那些展平的组。

总的来说会产生

Array (
  [6] => Array (
    [id] => 6
    [sales_total] => 4165.8
    [staff_id] => 6
    [sales_target_amount] => 30000
  )
  [10] => Array (
    [id] => 10
    [sales_total] => 1335.6
    [staff_id] => 10
    [sales_target_amount] => 1000
  ) 
)