Как сложить значения и добавить строку в массив codeigniter

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 ЕСЛИ 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 ...

misorude 30.11.2018 13:05

при каком условии вы хотите проверить, добавлять ли дополнительную строку?

oreopot 30.11.2018 13:07

Вы действительно хотите просуммировать значения всех записей, верно? (Потому что с данными вашего примера это должно привести к totalamountsale = 96280 и detials_daily = 243, но это не соответствует вашему данному примеру.)

misorude 30.11.2018 13:13

условие totalamountbuy == $

Sameh Doush 30.11.2018 13:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
340
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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->db->get() возвращает массив напрямую; это может быть более сложный объект, который просто реализует итерируемые возможности. В этом случае вам придется искать метод, чтобы получить результат в виде фактического массива или преобразовать его в один первый.)

misorude 30.11.2018 13:20

спасибо, но возникла ошибка. Произошла ошибка PHP. Серьезность: сообщение с уведомлением: попытка получить свойство не-объекта Имя файла: models / Json.php Номер строки: 42 и [{"id_order": "21", "item_code": "sale", "totalamountbuy": "$", "t‌ otalamountsale": "487‌ 90", "detials_daily": ‌ "153"}, {"id_order": "‌ 20", "item_code": «sal‌ e», «totalamountbuy»: ‌ «eruo», «totalamounts‌ ale»: «22200», «detial‌ s_daily»: «40»}, {«id_‌ order»: «19», «item_co‌» De ":" اتورة sale "," totalamountbuy ":" tl "," totalamountsale ":" 4500 "," detials_daily ":" 45 "}, {" id_orde‌ r ":" 0 "," item_code ":" ‌ TOTAL "," totalamountb‌ uy ":" $ "," totalamount‌ sale ": 0," detials_dai‌ ly ": 0}]

Sameh Doush 30.11.2018 13:45

Невозможно сказать, откуда это взялось, если вы не покажете нам свой сценарий и как вы пытались это реализовать. В моем коде всего около двух десятков строк, поэтому, если вы цитируете сообщения об ошибках, в которых упоминаются строки 42 или 292, в них полностью отсутствует какой-либо контекст.

misorude 30.11.2018 13:50

$ 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);

Sameh Doush 30.11.2018 13:52

Возможно, это должен быть $row['...'] вместо $row->..., не уверен, имеете ли вы здесь дело с реальными объектами или ассоциативными массивами, что не может быть выведено из вашего примера JSON.

misorude 30.11.2018 13:52

models / Json.php Номер строки: 42 if ($ row-> totalamountbuy == '$')

Sameh Doush 30.11.2018 13:53

Как я уже сказал, попробуйте получить доступ к $ row как к массиву, а не к объекту.

misorude 30.11.2018 13:54

да, конечно, спасибо за решение должно быть $ row ['...'] foreach ($ querydata as $ row) {if ($ row ['totalamountbuy'] == "$") {// если $, добавить дополнительные значения $ total ['totalamountsale'] + = $ row ['totalamountsale']; $ total ['detials_daily'] + = $ row ['detials_daily']; }}

Sameh Doush 30.11.2018 13:58

Большое спасибо за помощь мне

Sameh Doush 30.11.2018 14:02

Другие вопросы по теме