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
)
)
)