【问题标题】:How to sum values and add row to array codeigniter如何对值求和并将行添加到数组codeigniter
【发布时间】:2019-05-02 14:06:20
【问题描述】:

模型中的mysql

public function dailymovedate($datee,$dateee)
{
  header("Content-Type: application/json");
    $this->db->select("dailymovement.id_order,dailymovement.item_code,currency.currency_name as totalamountbuy,dailymovement.totalamountsale,CONCAT(dailymovement.detials_daily,' qyt',ordersale.totalqyt) AS detials_daily ", false);


    $this->db->from('dailymovement');
    $this->db->join('ordersale', 'ordersale.idorder= dailymovement.id_order','left outer');
    $this->db->join('currency', 'currency.currency_number = ordersale.currency_number','left outer');

    $this->db->where('dailymovement.data_daily>=', $datee);
    $this->db->where('dailymovement.data_daily<=', $dateee);
    $this->db->where('dailymovement.totalamountsale!=' ,null,FALSE);
    $this->db->order_by("dailymovement.id_order", "desc");
    $query = $this->db->get();


    return json_encode($query->result(),JSON_UNESCAPED_UNICODE);
}

数组 json

    [{"id_order":"21","item_code":"SALE","totalamountbuy":"$","totalamountsale":"48790","detials_daily":" 153"},
{"id_order":"23","item_code":"SALE","totalamountbuy":"$","totalamountsale":"20790","detials_daily":" 5"}
{"id_order":"20","item_code":"SALE","totalamountbuy":"ERUO","totalamountsale":"22200","detials_daily":" 40"},
{"id_order":"19","item_code":"SALE","totalamountbuy":"TL","totalamountsale":"4500","detials_daily":" 45"}]

例如,求和并加行 总和值 totalamountsale IF totalamountbuy == $

我想添加一个额外的字段并使其像`

{"item_code":"TOTAL","totalamountbuy":"$","totalamountsale":"69580","detials_daily":" 158"}

现在结果

    [{"id_order":"21","item_code":"SALE","totalamountbuy":"$","totalamountsale":"48790","detials_daily":" 153"},
{"id_order":"23","item_code":"SALE","totalamountbuy":"$","totalamountsale":"20790","detials_daily":" 5"}
{"id_order":"20","item_code":"SALE","totalamountbuy":"ERUO","totalamountsale":"22200","detials_daily":" 40"},
{"id_order":"19","item_code":"SALE","totalamountbuy":"TL","totalamountsale":"4500","detials_daily":" 45"},
{"id_order":"0","item_code":"TOTAL","totalamountbuy":"$","totalamountsale":"69580","detials_daily":" 158"}]

【问题讨论】:

  • 循环遍历现有数组,对值求和,创建相同结构的对象/关联数组并用值填充,并将其附加到原始数组的末尾,然后再返回它是 JSON 编码的……
  • 您要在什么条件下检查是否添加额外的行?
  • 您确实想总结所有记录的值,对吧? (由于您给定的示例数据,这应该导致 totalamountsale = 96280 和 detials_daily = 243,但这与您给定的示例不匹配。)
  • 条件totalamountbuy == $

标签: php mysql arrays json codeigniter


【解决方案1】:
// for demonstration purposes, using json_decode to get an array matching your sample data
$querydata = json_decode('[{"id_order":"21","item_code":"SALE","totalamountbuy":"$","totalamountsale":"48790","detials_daily":" 153"},
{"id_order":"23","item_code":"SALE","totalamountbuy":"$","totalamountsale":"20790","detials_daily":" 5"},
{"id_order":"20","item_code":"SALE","totalamountbuy":"ERUO","totalamountsale":"22200","detials_daily":" 40"},
{"id_order":"19","item_code":"SALE","totalamountbuy":"TL","totalamountsale":"4500","detials_daily":" 45"}]');

// initialize total array with 0 as starting value for the fields to sum up
$total = [ 'id_order' => '0', 'item_code' => 'TOTAL', 'totalamountbuy' => '$',
           'totalamountsale' => 0, 'detials_daily' => 0 ];

foreach($querydata as $row) {
  if($row->totalamountbuy == '$') { // if $, add up values
    $total['totalamountsale'] += $row->totalamountsale;
    $total['detials_daily'] += $row->detials_daily;
  }
}

// append total to existing array
$querydata[] = $total;

echo json_encode($querydata);

【讨论】:

  • (不确定$this-&gt;db-&gt;get()是否直接返回一个数组;它可能是一个更复杂的对象,只是实现了可迭代的功能。在这种情况下,你必须去寻找方法来获取结果作为实际数组或先将其转换为一个。)
  • 谢谢,但是错误,遇到 PHP 错误严重性:通知消息:尝试获取非对象文件名的属性:models/Json.php 行号:42 和 [{"id_order": "21","item_code":"sale","totalamountbuy":"$","totalamountsale":"48790","detials_daily":"153"},{"id_order":"20","item_code": "sale","totalamountbuy":"eruo","totalamountsale":"22200","detials_daily":"40"},{"id_order":"19","item_code":"فاتورة sale","totalamountbuy" :"tl","totalamountsale":"4500","detials_daily":"45"},{"id_order":"0","item_code":"TOTAL","totalamountbuy":"$","totalamountsale" :0,"detials_daily":0}]
  • 如果您不向我们展示您的脚本以及您是如何尝试实现的,就无法知道它的来源。我的代码只有大约两打行,所以如果你引用提到第 42 或 292 行的错误消息,那完全没有任何上下文。
  • $querydataw = json_encode($query->result(),JSON_UNESCAPED_UNICODE); $querydata = json_decode($querydataw,JSON_UNESCAPED_UNICODE); $total = [ 'id_order' => '0', 'item_code' => 'TOTAL', 'totalamountbuy' => '$', 'totalamountsale' => 0, 'detials_daily' => 0 ]; foreach($querydata as $row) { if($row->totalamountbuy == '$') { // 如果是 $,则将值相加 $total['totalamountsale'] += $row->totalamountsale; $total['detials_daily'] += $row->detials_daily; } } // 将总计追加到现有数组 $querydata[] = $total;返回 json_encode($querydata,JSON_UNESCAPED_UNICODE);
  • 也许它需要是$row['...'] 而不是$row-&gt;...,不确定您在这里处理的是实际对象还是关联数组,这无法从您的示例 JSON 中推断出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多