我很感激有关处理下面的多维数组数据的一些帮助。我想要实现的是构建一个具有重复日期作为键的数组,以及" nb"每个重复日期的索引。这是我到目前为止所做的:
<?php
$caOppo = [
0 => [
"nb" => "5000",
"date" => "2016-01-26",
"nb_enc" => "1",
"tp" => "BUSINESS PB"
],
1 =>[
"nb" => "9100",
"date" => "2016-01-26",
"nb_enc" => "1",
"tp" => "BLUE SOMETHING"
],
2 => [
"nb" => "12000",
"date" => "2016-01-12",
"nb_enc" => "1",
"tp" => "BUSINESS MC"
],
3 => [
"nb" => "20000",
"date" => "2016-01-22",
"nb_enc" => "1",
"tp" => "BUSINESS MC"
],
4 => [
"nb" => "29900",
"date" => "2016-01-25",
"nb_enc" => "1",
"tp" => "KLIPAY"
],
5 => [
"nb" => "36350",
"date" => "2016-01-04",
"nb_enc" => "2",
"tp" => "KLIPAY"
],
6 => [
"nb" => "36900",
"date" => "2016-01-27",
"nb_enc" => "1",
"tp" => "BUSINESS PB"
],
7 => [
"nb" => "45400",
"date" => "2016-01-13",
"nb_enc" => "1",
"tp" => "BUSINESS MC"
],
8 => [
"nb" => "50700",
"date" => "2016-01-08",
"nb_enc" => "3",
"tp" => "BUSINESS MC"
],
9 => [
"nb" => "54000",
"date" => "2016-01-07",
"nb_enc" => "1",
"tp" => "BLUE SOMETHING"
],
10 => [
"nb" => "61750",
"date" => "2016-01-26",
"nb_enc" => "3",
"tp" => "BUSINESS MC"
],
11 => [
"nb" => "78900",
"date" => "2016-01-15",
"nb_enc" => "1",
"tp" => "KLIPAY"
],
12 => [
"nb" => "171050",
"date" => "2016-01-20",
"nb_enc" => "8",
"tpe_oppo" => "BUSINESS MC"
],
13 => [
"nb" => "172900",
"date" => "2016-01-19",
"nb_enc" => "7",
"tp" => "BUSINESS MC"
],
14 => [
"nb" => "208950",
"date" => "2016-01-22",
"nb_enc" => "10",
"tp" => "BUSINESS PB"
]
];
$dates = [];
foreach ($caOppo as $uniqueCaOppo) {
$dates[] = $uniqueCaOppo['date'];
}
//Retrieving duplicates
$duplicates = [];
foreach(array_count_values($dates) as $val => $c){
if($c > 1){
$duplicates[$val] = 0;
}
}
print_r($duplicates); // Returns Array ( [2016-01-26] => 0 [2016-01-22] => 0 )
//which is what is expected
现在每个dupilicated的数量都设置为0.现在我们需要为每个重复日期添加所有$ caOppo [$ i] [&#39; nb&#39;],结果将替换为0。
for ($i=0; $i < count($caOppo); $i++) {
if (in_array($caOppo[$i]['date'], array_keys($duplicates))) {
foreach ($duplicates as $key => $value) {
if($caOppo[$i]['date']= $key){
$duplicates[$key] += $caOppo[$i]['nb'];
}
}
}
}
print_r($duplicates); // Returns Array ( [2016-01-26] => 304800 [2016-01-22]
//=> 304800 ), which is not what is expected
提前感谢您的帮助。
还想知道是否有办法转换所有多维数组,因此重复的日期将只被该日期的一个实例所取代,其中包含$ caOppo [$ i] [&#39; nb&#39;]中的总和。
$cnt=count($caOppo);
for ($i=0;$i<$cnt;$i++) {
$caOppo[$i]['nb']=(int)$caOppo[$i]['nb'];
for ($j=0;$j<$i;$j++) {
if (isset($caOppo[$j])&&($caOppo[$j]['date']===$caOppo[$i]
['date'])) {
$caOppo[$j]['nb']+=$caOppo[$i]['nb'];
$caOppo[$j]['tp']=[];
$tp_value = $caOppo[$i]['tp'];
$caOppo[$j]['tp'][$tp_value]=$caOppo[$i]['nb'];
unset($caOppo[$i]);
break;
}
}
}