将数组键设置为字符串

时间:2017-07-16 20:25:55

标签: php arrays

我很感激有关处理下面的多维数组数据的一些帮助。我想要实现的是构建一个具有重复日期作为键的数组,以及" 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;
        }
    }
}

0 个答案:

没有答案