PHP减少和合并?一个数组分几步

如何解决PHP减少和合并?一个数组分几步

我正在尝试减少/合并一个看起来像这样的数组

$test = Array
(
    [0] => Array
        (
            [id] => 150023
            [rowtext] => part 1
            [rowpartnumber] => 4360
            [qty] => 2.00
            [min_delper] => 2021-07-28
        )

    [1] => Array
        (
            [id] => 150026
            [rowtext] => part 2
            [rowpartnumber] => 4360
            [qty] => 2.00
            [min_delper] => 2021-07-29
        )

    [2] => Array
        (
            [id] => 150023
            [rowtext] => part 3
            [rowpartnumber] => 4361
            [qty] => 4.00
            [min_delper] => 2021-08-22
        )

    [3] => Array
        (
            [id] => 150023
            [rowtext] => part 4
            [rowpartnumber] => 4362
            [qty] => 2.00
            [min_delper] => 2021-09-22
        )

);

我想对 [qty] 求和,其中 [rowpartnumber] 相同,我可以用

$summa_test = array_reduce($test,function ($a,$b) {
  isset($a[$b['rowpartnumber']]) ? $a[$b['rowpartnumber']]['qty'] += $b['qty'] : $a[$b['rowpartnumber']] = $b;  
  return $a;
});

但我也想将 [id] 中的 [rowpartnumer] 相同并将其添加到 [id] 所以输出应该是这样的:

Array
(
    [0] => Array
        (
            [id] => 150023 150026
            [rowtext] => part 1
            [rowpartnumber] => 4360
            [qty] => 4.00
            [min_delper] => 2021-07-28
        )

    [1] => Array
        (
            [id] => 150023
            [rowtext] => part 3
            [rowpartnumber] => 4361
            [qty] => 4.00
            [min_delper] => 2021-08-22
        )

    [2] => Array
        (
            [id] => 150023
            [rowtext] => part 4
            [rowpartnumber] => 4362
            [qty] => 2.00
            [min_delper] => 2021-09-22
        )

);

我似乎无法理解它,所以各位专家的帮助会很棒,谢谢

解决方法

如果 id 已经存在,您必须修改回调函数以将 rowpartnumber 连接到前一个。像这样:

$summa_test = array_reduce($test,function ($carry,$item) {
  if (isset($carry[$item['rowpartnumber']])) {
      $carry[$item['rowpartnumber']]['qty'] += $item['qty'];
      $carry[$item['rowpartnumber']]['id'] .= " ".$item['id'];
  }
  else {
      $carry[$item['rowpartnumber']] = $item;
  }
  return $carry;
});

我不知道这是否是一个问题,但由于连接 id 将成为一个字符串,其中找到多个 id - 但只有一个时仍然是整数。如果这对您来说是个问题,有两种选择:

  • 即使只有一个 id 也转换为字符串
  • 使用数组存储多个 ID。

(我将参数名称更改为 PHP 文档中使用的名称 - 您可以将其改回来,但通常保持这种方式是个好主意 - 其他人会更容易理解您的代码。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?