Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于值合并或合并数组_Php_Arrays - Fatal编程技术网

Php 基于值合并或合并数组

Php 基于值合并或合并数组,php,arrays,Php,Arrays,我有一个数组,它告诉我订单的交货日期,还有一个数组,上面有哪些项目 ( [0] => Array ( [0] => 14 May, 2021 [1] => Array ( [0] => Bestsellers Brownie Box ) ) [1] => Array ( [0] => 14 May, 202

我有一个数组,它告诉我订单的交货日期,还有一个数组,上面有哪些项目

(
[0] => Array
    (
        [0] => 14 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )

[1] => Array
    (
        [0] => 14 May, 2021
        [1] => Array
            (
                [0] => Cookies & Cream Brownies
            )

    )

[2] => Array
    (
        [0] => 14 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )

[3] => Array
    (
        [0] => 29 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )

[4] => Array
    (
        [0] => 13 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )

[5] => Array
    (
        [0] => 13 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )

[6] => Array
    (
        [0] => 14 May, 2021
        [1] => Array
            (
                [0] => Bestsellers Brownie Box
            )

    )
我需要做的是对其进行某种合并,因此我们最终得到一个更像这样的数组:

[0] => Array
    (
        [0] => 14 May, 2021
        [1] => Array
            (
                [0] => 3 x Bestsellers Brownie Box
                [1] => 1 x Cookies & Cream Brownies
            )

    )

[1] => Array
    (
        [0] => 29 May, 2021
        [1] => Array
            (
                [0] => 1 x Bestsellers Brownie Box
            )

    )

[2] => Array
    (
        [0] => 13 May, 2021
        [1] => Array
            (
                [0] => 2 x Bestsellers Brownie Box
            )

    )
因此,它将在特定日期交付的所有内容汇集在一起。我希望这是有道理的。这里的计划是创建一个日历视图,这样我的客户一眼就能看到他们在某一天有多少物品需要交付


我就是不知道如何以这种方式组合/合并/加入这些数组。我有一些想法,但我只是认为它们可能会变得相当麻烦,这里的一些人肯定会有一些很好的方法来做到这一点。提前谢谢

这样做可以满足您的要求:

<?php
$input = [
[
  "14 May, 2021",
  [ "Bestsellers Brownie Box" ] ],
[
  "14 May, 2021",
  [ "Cookies & Cream Brownies" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "29 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ]
];

$output = [];
array_walk($input, function($order) use (&$output) {
  $date = $order[0];
  $items = $order[1];
  
  if (!array_key_exists($date, $output)) {
    $output[$date] = [];
  }
  
  foreach ($items as $item) {
    if (array_key_exists($item, $output[$date])) {
      $output[$date][$item] += 1;
    } else {
      $output[$date][$item] = 1;
    }
  }
});

print_r($output);

创建您建议的格式的变体是:

<?php
$input = [
[
  "14 May, 2021",
  [ "Bestsellers Brownie Box" ] ],
[
  "14 May, 2021",
  [ "Cookies & Cream Brownies" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "29 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ]
];

$output = [];
array_walk($input, function($order) use (&$output) {
  $date = $order[0];
  $items = $order[1];
  
  if (!array_key_exists($date, $output)) {
    $output[$date] = [$date, []];
  }
  
  foreach ($items as $item) {
    if (array_key_exists($item, $output[$date][1])) {
      $output[$date][1][$item] += 1;
    } else {
      $output[$date][1][$item] = 1;
    }
  }
});
$output = array_values($output);

print_r($output);

这是相当超前的东西。你有没有尝试过把这个编码我们可以see@RiggsFolly-我没有做过,嗯,我尝试过一些事情,但我不能想出一个非常有效的方法来做。很高兴听到这是直截了当的,也许你可以帮助我学习如何做:)谢谢。在你尝试提高效率或优化之前,首先让它工作起来。我真的不知道如何@RiggsFolly-因此我在这里问这个问题。我完全明白你的意思,但我被卡住了。我需要帮助。你只需遍历所有订单。对于您处理的每个订单,您检查结果中是否已经存在日期和项目,如果不存在,则创建它们,否则您将增加一个计数器。非常感谢-这非常有用。我将通读代码,以便我也完全理解它的组成部分。非常感谢。
<?php
$input = [
[
  "14 May, 2021",
  [ "Bestsellers Brownie Box" ] ],
[
  "14 May, 2021",
  [ "Cookies & Cream Brownies" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "29 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "13 May, 2021",
    [ "Bestsellers Brownie Box" ] ], 
  [
    "14 May, 2021",
    [ "Bestsellers Brownie Box" ] ]
];

$output = [];
array_walk($input, function($order) use (&$output) {
  $date = $order[0];
  $items = $order[1];
  
  if (!array_key_exists($date, $output)) {
    $output[$date] = [$date, []];
  }
  
  foreach ($items as $item) {
    if (array_key_exists($item, $output[$date][1])) {
      $output[$date][1][$item] += 1;
    } else {
      $output[$date][1][$item] = 1;
    }
  }
});
$output = array_values($output);

print_r($output);
Array
(
    [0] => Array
        (
            [0] => 14 May, 2021
            [1] => Array
                (
                    [Bestsellers Brownie Box] => 3
                    [Cookies & Cream Brownies] => 1
                )

        )
    [1] => Array
        (
            [0] => 29 May, 2021
            [1] => Array
                (
                    [Bestsellers Brownie Box] => 1
                )

        )
    [2] => Array
        (
            [0] => 13 May, 2021
            [1] => Array
                (
                    [Bestsellers Brownie Box] => 2
                )

        )
)