如何总结一个共同的日期变量?

时间:2019-06-13 20:28:02

标签: php arrays

我正在尝试使用PHP和JSON文件进行一些数学运算。基本上,我有一个数组,其中包含具有价格和出售日期的项目。 我想做的是将共享同一日期的所有商品的价格相加。例如,将对今天售出的所有商品的价格进行汇总,并且代码会回显最终的价格。

我已经从JSON文件中成功检索了所需的信息,并将价格和日期放入数组中。我可以从foreach循环外部调用数组。

在下面的代码中,我一直在尝试一种解决方法,以使其正常运行,但是可能需要创建一个数组,其中包含x和y年之间的所有日期,这可能不是最佳选择。

我的JSON看起来像这样(格式不正确)

Array
   [0]
        Price = 10
        Date = 1-1-2019
   [1]
        Price = 10
        Date = 2-1-2019
   [2]
        Price = 10
        Date = 2-1-2019
   [3]
        Price = 10
        Date = 1-1-2019

这是我的PHP代码

<?php
session_start();

$myFile = "../public/Objects.json";
$arr_data = array();

//Get data from existing json file

$jsondata = file_get_contents($myFile);

// converts json data into array

$arr_data = json_decode($jsondata, true);

// Fetch information in JSON

foreach($arr_data[objects] as $key=>$value){
 if ($arr_data[objects][$key][status] == "Vendu") {
  $reception_date = $arr_data[objects][$key][reception_date];
  $quantity = $arr_data[objects][$key][quantity];
  $price =  $arr_data[objects][$key][price];
  $batchprice = $price * $quantity;
  $total[$key] = array(
   "price" => $batchprice,
   "reception_date" => $reception_date
  );
  $date = "1-1-2019";
  if($total[$key][reception_date] == $date) {
   $totalprice += $total[$key][price];
  }
  else {
  }
 }
 else {
 }
}
echo "[$date, $totalprice]"; //Outputs [1-1-2019, 20]
?>

我希望能够以以下格式回显列表。该日期必须是最早的日期到最近的日期,否则我的图表将无法正常工作。

[date, price], [date, price], [date, price]...

我还需要将日期格式从1-1-2019(d-m-y)转换为2000、8、5(y-m-d),以便在我的Google API图表中使用。我想我可以通过使用$ data = explode( something )并使用$ data [0] ...检索d-m-y来做到这一点。

非常感谢您的光临!

1 个答案:

答案 0 :(得分:1)

代替此:

  $total[$key] = array(
   "price" => $batchprice,
   "reception_date" => $reception_date
  );
  $date = "1-1-2019";
  if($total[$key][reception_date] == $date) {
   $totalprice += $total[$key][price];
  }

您可以执行以下操作:

$total[$reception_date] = (isset($total[$reception_date]) ? $total[$reception_date] + $batchprice : $batchprice);

应该为您提供一个数组,其中包含日期和当天总价的键。

在那之后,对结果数组执行usort()以将它们按顺序排列,然后在数组上循环并回显您的值。