我需要通过共享日期列对 3 个多维数组中的数据进行合并和分组。在这些组中,我想对单位列值求和,以便拥有一个二维数组,其中的行包含唯一日期和总单位。
$array1 = [
[
"sales" => [
["Date" => "2014-04-01", "Units" => 1],
["Date" => "2014-04-02", "Units" => 7]
]
]
];
$array2 = [
[
"sales" => [
["Date" => "2014-04-01", "Units" => 3],
["Date" => "2014-04-02", "Units" => 2]
]
]
];
$array3 = [
[
"sales" => [
["Date" => "2014-04-01", "Units" => 0],
["Date" => "2014-04-02", "Units" => 5]
]
]
];
期望的输出::
[
['Date' => '2014-04-01', 'Units' => 4],
['Date' => '2014-04-02', 'Units' => 14],
]
<?php
$array1 = array("orange", "banana");
$array2 = array("ab", "ba");
$array3 = array("cd", "ef");
array_push($array1,$array2 , $array3);
print_r($array1);
?>
<?php
$arr1=array(
'Date' => '2014-04-02'
'Units' => 5
);
$arr2=array(
'Date' => '2014-04-02'
'Units' => 5
);
$arr3=array(
'Date' => '2014-04-02'
'Units' => 5
);
$arr['sales'][0]=$arr1;
$arr['sales'][1]=$arr2;
$arr['sales'][2]=$arr3;
$data[]=$arr;
print_r($data);
?>
假设您有您提到的数组,则执行此操作的方法如下:
<?php
$first = array ();
$first[0] = array ( "Date" => "2014-04-01", "Units" => 1 );
$first[1] = array ( "Date" => "2014-04-02", "Units" => 7 );
$first[2] = array ( "Date" => "2014-04-03", "Units" => 5 );
$first[3] = array ( "Date" => "2014-04-04", "Units" => 1 );
echo "<pre>";
print_r ($first);
echo "</pre>";
echo "<hr>";
$second = array ();
$second[0] = array ( "Date" => "2014-04-01", "Units" => 3 );
$second[1] = array ( "Date" => "2014-04-02", "Units" => 2 );
$second[2] = array ( "Date" => "2014-04-03", "Units" => 5 );
$second[3] = array ( "Date" => "2014-04-04", "Units" => 2 );
echo "<pre>";
print_r ($second);
echo "</pre>";
echo "<hr>";
$third = array ();
$third[0] = array ( "Date" => "2014-04-01", "Units" => 0 );
$third[1] = array ( "Date" => "2014-04-02", "Units" => 5 );
$third[2] = array ( "Date" => "2014-04-03", "Units" => 5 );
$third[3] = array ( "Date" => "2014-04-04", "Units" => 4 );
echo "<pre>";
print_r ($third);
echo "</pre>";
echo "<hr>The total is: ";
$total = array();
foreach ($first as $key=>$day) {
$total[$key]=array("Date" => "2014-04-02", "Units" => ($first[$key]["Units"] +$second[$key]["Units"] +$third[$key]["Units"]) );
}
echo "<pre>";
print_r ($total);
echo "</pre>";
echo "<hr>";
但这仅在每个日期的密钥相同时才有效。 (又名,0 始终对应于 2014-04-01 )。 如果我必须处理这个问题,我可能会先看看如何创建这些数组,然后我会使用日期作为关键
将每个数组中的相关子集合并到单个数组中,以便可以在单个循环中迭代所有数据。
循环时,如果第一次遇到日期值,请将整行保存为引用变量并将该引用推入结果数组中。如果再次遇到日期值,则仅访问单位值并将其添加到引用的单位值中。
以这种方式使用引用可以避免在循环后调用
array_values()
来删除临时键。
代码:(演示)
$result = [];
foreach (array_merge($a[0]['sales'], $b[0]['sales'], $c[0]['sales']) as $row) {
if (!isset($ref[$row['Date']])) {
$ref[$row['Date']] = $row;
$result[] =& $ref[$row['Date']];
} else {
$ref[$row['Date']]['Units'] += $row['Units'];
}
}
var_export($result);