Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для SamcroSOA
8 / 8 / 5
Регистрация: 24.03.2015
Сообщений: 44

Вывести итог на конец каждого месяца (массивы)

16.09.2015, 16:00. Показов 948. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Есть ассоциативный многомерный массив:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    
array{
  [0]=>{ 
          ["M_Y"]=>"01.09.15"
          ["DOC_SUM"]=> "-205"
  }
  [1]=>{
          ["M_Y"]=>"01.09.15"
          ["DOC_SUM"]=>"196"
          }
  [2]=>{
          ["M_Y"]=>"01.08.15"
          ["DOC_SUM"]=>"-133,07"
  }
  [3]=>{
          ["M_Y"]=>"01.08.15"
          ["DOC_SUM"]=>"-42,26"
  }
  [4]=>{
          ["M_Y"]=>"01.08.15"
          ["DOC_SUM"]=>"84"
  }
  [5]=>{
          ["M_Y"]=>"01.08.15"
          ["DOC_SUM"]=>"196"
  }
}

Нужно сделать итог с общим остатком на конец каждого месяца -не просто вывести суму за каждый месяц, а учесть, что, к примеру, остаток на 09.2015 будет равен остатку за 08.2015 плюс сума полученная за 09.2015 и т.д.

Сумму за месяц я получила через array_reduce,

PHP
1
2
3
4
5
6
        $sum = array_reduce($array, function ($a, $b) {
             
             isset($a[$b['M_Y']]) ? $a[$b['M_Y']]['DOC_SUM'] += (int) $b['DOC_SUM'] : $a[$b['M_Y']] = $b;
             return $a;
 
         });
а вывести остаток на конец каждого месяца с учетом остатка за предыдущий у меня умственных способностей не хватило.
Подскажите, как это можно реализовать, пожалуйста)
Заранее благодарна!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2015, 16:00
Ответы с готовыми решениями:

Вывести размер вклада для каждого месяца
1.Размер первоначального банковского вклада генерируется случайным образом (2000-10000). Размер процентной ставки от 1 до 3 процентов в...

Вывести на консоль состояние банковского счёта по истечении каждого полного месяца,
Вывести на консоль состояние банковского счёта по истечении каждого полного месяца, при нахождении средств на счёте в течение введённого с...

Вывести сумму начисленных процентов на 1 число каждого месяца, в сроке договора
Здравствуйте помогите с запросом mssql , нужно вывести сумму начисленных процентов на 1 число каждого месяца ,в сроке договора SELECT...

5
 Аватар для SamcroSOA
8 / 8 / 5
Регистрация: 24.03.2015
Сообщений: 44
11.10.2015, 23:56  [ТС]
Хелп!!! Плиз( У меня так ничего и не получилось(
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
12.10.2015, 00:17
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$arr_i=array(
  array(
          'M_Y'=>'01.09.15',
          'DOC_SUM'=> '-205'
  ),
  array(
          'M_Y'=>'01.09.15',
          'DOC_SUM'=>'196'
          ),
  array(
          'M_Y'=>'01.08.15',
          'DOC_SUM'=>'-133,07'
  ),
  array(
          'M_Y'=>'01.08.15',
          'DOC_SUM'=>'-42,26'
  ),
  array(
          'M_Y'=>'01.08.15',
          'DOC_SUM'=>'84'
  ),
  array(
          'M_Y'=>'01.08.15',
          'DOC_SUM'=>'196'
  )
);
 
foreach ($arr_i as $k => $val){
    if(!isset($arr_k[$val['M_Y']]))
        $arr_k[$val['M_Y']]=$arr_i[$k]['DOC_SUM'];
    else
        $arr_k[$val['M_Y']]=$arr_k[$val['M_Y']]+$arr_i[$k]['DOC_SUM'];
}
print_r($arr_k);
1
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
12.10.2015, 01:03
SamcroSOA,
На скорую руку.

Не по теме:

С БД было бы проще...


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$operations[] = array('M_Y' => '01.09.15', 'DOC_SUM' => '-10');
$operations[] = array('M_Y' => '01.09.15', 'DOC_SUM' => '20');
$operations[] = array('M_Y' => '01.09.15', 'DOC_SUM' => '30');
$operations[] = array('M_Y' => '01.10.15', 'DOC_SUM' => '45');
$operations[] = array('M_Y' => '01.11.15', 'DOC_SUM' => '100');
$operations[] = array('M_Y' => '01.10.15', 'DOC_SUM' => '50');
$operations[] = array('M_Y' => '01.10.14', 'DOC_SUM' => '120');
 
$dates = array();
 
foreach($operations as $operation)
{
    $date = explode('.', $operation['M_Y']);
    $date = strtotime('01.' . $date[1] . '.20' . $date[2]);  
 
    if(isset($dates[$date]))
        $dates[$date] += $operation['DOC_SUM'];
    else
        $dates[$date] = $operation['DOC_SUM'];
    
}
 
ksort($dates);
$current_sum = 0;
 
foreach($dates as $date => $sum)
{
    $current_sum += $sum;
    echo '<h2>' . date('m.Y:', $date) . '</h2>' . $current_sum;
}
1
 Аватар для SamcroSOA
8 / 8 / 5
Регистрация: 24.03.2015
Сообщений: 44
15.10.2015, 00:29  [ТС]
Jodah, спасибо большое))) Все получилось)

Добавлено через 2 минуты
Laroux, считает только сумму операций за месяц без учета итогов за предыдущий... собственно то, что у меня уже было(
Но все равно - спасибо за помощь)
0
 Аватар для SamcroSOA
8 / 8 / 5
Регистрация: 24.03.2015
Сообщений: 44
17.11.2015, 23:21  [ТС]
Если кому нужно будет:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$dates = array();
 
  foreach($operations as $operation){
      $date = explode('.', $operation['M_Y']);
      $date = strtotime('01.' . $date[1] . '.20' . $date[2]);    
   
      if(isset($dates[$date])){
          $dates[$date] += $operation['DOC_SUM'];}
      else{
          $dates[$date] = $operation['DOC_SUM'];}      
  }
   
  foreach($operations as &$operation)
  {
      $operation['M_Y']='';
  } 
 
  ksort($dates);
 
  $current_sum = 0;
  $total = array(); 
 
  foreach($dates as $date => $sum){    
    $day=cal_days_in_month(CAL_GREGORIAN, date('m',$date), date('Y',$date));
    $current_sum += $sum;
    $total[] = array('M_Y' => 'Остаток на ', 'CREATEDATE' => $day.'.'.date('m.Y',$date), 'DOC_SUM' => $current_sum, 'TYPE_OPERATION'=>'', 'DETALIZATION_DEBIT'=>'');
  } 
        
  $all = array_merge($total, $operations);
           
  function sort_asc($a, $b) {
    if (date("Y-m-d",strtotime($a['CREATEDATE']))< (date("Y-m-d",strtotime($b['CREATEDATE']))))
    return 1;
  }
 
  usort($all, 'sort_asc');
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2015, 23:21
Помогаю со студенческими работами здесь

Водится номер года. Вывести число первого понедельника для каждого месяца
Водится номер года. Вывести число первого понедельника для каждого месяца. Добавлено через 13 часов 33 минуты помогите, кто может

массивы. итог.
Очень прошу помочь мне: решите ,пожалуйста, 4 задачи на массивы, причём к каждой задаче обязательно нужен алгоритм! №1)Задан числовой...

Массивы, нарастающий итог.
Задачка такая: Нарастающий итог. Каждый элемент aij матрицы A(m,n) заменить суммой элементов подматрицы A’(i,j), расположенной в левом...

Excel. Данные "на конец месяца" надо перенести "на начало" следующего месяца
Всем форумчанам желаю доброго времени суток Любая бухгалтерия имеет какие-то остатки на конец месяца. Эти же остатки автоматически...

При вводе порядкового номера месяца вывести название этого месяца
Написать программу, которая при вводе порядкового номера месяца (1, 2, 3 и тд) выводит название этого месяца. Взять 6 месяцев Нуждаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru