如何将具有相同索引和值的 2 个数组与 php 组合?

2023-10-16php开发问题
1

本文介绍了如何将具有相同索引和值的 2 个数组与 php 组合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有 2 个数组,如下所示:

I have 2 array like follows:

$array1 = [
 '0' => [
   'no_invoice' => 'INV0001',
   'product_code' => '1111111',
  ], 
 '1' => [
  'no_invoice' => 'INV0001',
  'product_code' => '1111112',
 ]
];

  $array2 = [
    '0' => [
      'product_code' => '1111112',
      'free_valie' => 839,
      'count' => 1240
    ],
  ];

是否可以将上面的数组组合成这样:

Is it possible to combine arrays above to be like this:

Array(
 [0] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111111',
  )
 [1] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111112',
    'free_valie' => 839,
    'count' => 1240
  )
)

所以,如果数组具有相同的产品代码,那么它将像上面的例子一样加入.

So, if array have same product code, then it will join like the example above.

我尝试过使用数组合并,array_merge($array1, $array2);但是结果是这样的:

I have been tried with use array merge, array_merge($array1, $array2); But the result is like this:

Array(
 [0] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111111',
  )
 [1] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111112',
  )
 [2] => Array
  (
    'product_code' => '1111112',
    'free_valie' => 839,
    'count' => 1240
  )
)

推荐答案

此代码将满足您的需求.它使用 <遍历 $array1 中的每个值code>array_search 以查看条目的 product_code 是否也存在于 $array2 中(通过查看 product_code使用 array_column<提取的 $array2 列/代码>).如果是,则合并这些值.请注意,我们在 foreach 中使用了 &$val,导致值通过引用传递,从而允许在循环中修改它

This code will do what you want. It loops over each value in $array1, using array_search to see if the entrie's product_code is also present in $array2 (by looking through the product_code column of $array2 extracted using array_column). If it is, the values are merged. Note that we use &$val in the foreach, causing the value to be passed by reference which allows it to be modified in the loop

foreach ($array1 as &$val) {
    if (($k = array_search($val['product_code'], array_column($array2, 'product_code'))) !== false) {
        $val = array_merge($val, $array2[$k]);
    }
}

print_r($array1);

输出:

Array
(
    [0] => Array
        (
            [no_invoice] => INV0001
            [product_code] => 1111111
        )

    [1] => Array
        (
            [no_invoice] => INV0001
            [product_code] => 1111112
            [free_valie] => 839
            [count] => 1240
        )

)

3v4l.org 上的演示

这篇关于如何将具有相同索引和值的 2 个数组与 php 组合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17