За последние 24 часа нас посетили 67132 программиста и 1565 роботов. Сейчас ищут 890 программистов ...

Рекурсивно сложить массив

Тема в разделе "PHP для новичков", создана пользователем shalx shalx, 22 фев 2017.

  1. shalx shalx

    shalx shalx Активный пользователь

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Привет
    Есть массив примерно такого вида
    PHP:
    1. array(1,2,3,4,5);
    Нужно суммировать и получить массив такого вида
    PHP:
    1. arra(3,6,10,15);
    сумма первого и второго ,сумма первого второго и третьего и так далее

    Спасибо заранее
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. function sum_array($arr){
    2.     foreach($arr as $val){
    3.         $a[]=$val;
    4.         $newArr[]=array_sum($a);
    5.     }
    6.     array_shift($newArr);
    7.     return $newArr;
    8. }
    9. print_r(sum_array(array(1,2,3,4,5,6)));
    Код (Text):
    1. Array
    2. (
    3.     [0] => 3
    4.     [1] => 6
    5.     [2] => 10
    6.     [3] => 15
    7.     [4] => 21
    8. )
     
    shalx shalx нравится это.
  3. shalx shalx

    shalx shalx Активный пользователь

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Спасибо , а циклом for нельзя без array_sum и array_shift?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    не забудь перед циклом
    $a = $newArr = [];
    Либо жди Notice
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Нет нотиса не будет, хотя мне тоже нравится писать
    --- Добавлено ---
    Можно, только мне больше foreach нравится с массивами. А самому не додуматься?
    PHP:
    1. <?php
    2.  
    3. $a = [1,2,3,4,5];
    4. $a1 = [];
    5.  
    6. $s = 0;
    7.  
    8. foreach ($a as $index => $num) {
    9.     $s += $num;
    10.     if ($index > 0) {
    11.         $a1[] = $s;
    12.     }    
    13. }
    14.  
     
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну можно например так:
    PHP:
    1. function sum_array($arr){
    2.     $newArr=[];
    3.     $cnt =  count($arr);
    4.     for($i=0;$i<$cnt;$i++){
    5.         $tmpVal = $arr[$i];
    6.         if(isset($newArr[$i-1])){
    7.         $newArr[]=$tmpVal+$newArr[$i-1];
    8.         } else {
    9.             $newArr[]=$tmpVal;
    10.         }
    11.     }
    12.     unset($newArr[0]);
    13.     return $newArr;
    14. }
    15. print_r(sum_array(array(1,2,3,4,5,6)));
    Код (Text):
    1. Array
    2.  
    3. (
    4.     [1] => 3
    5.     [2] => 6
    6.     [3] => 10
    7.     [4] => 15
    8.     [5] => 21
    9. )
    Ключи массива при желании можно изменить.
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
  8. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Это слегка модифицированный пример выше.Способов естественно много,выбирай любой)
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Просто здесь временный массив не нужен, можно сразу сумму накапливать.
    https://php.ru/forum/threads/rekursivno-slozhit-massiv.62291/#post-504621
     
  10. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну да,можно и без временного массива.Ну мы показали ТС разные подходы к решению его задачи,пусть выбирает любой)
     
  11. shalx shalx

    shalx shalx Активный пользователь

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Пришлось сделать так потомучто здесь несколько массивов
    PHP:
    1. for($i = 0; $i <count($n); ++$i){
    2. $g[$i]=$d[$i]-$k[$i];
    3. $t=array_sum($g);}
    Всем спасибо
     
  12. prohodiltut

    prohodiltut Активный пользователь

    С нами с:
    4 фев 2017
    Сообщения:
    21
    Симпатии:
    2
    PHP:
    1. <?php
    2.   $arr = array(1, 2, 3, 4, 5);
    3.   $arra = array();
    4.   for ($i = 0; $i < count($arr) - 1; $i++)
    5.          {
    6.           $arra[$i] =  $arr[$i] + $arr[$i+1];
    7.           $arr[$i+1]  = $arra[$i];
    8.           echo $arra[$i], "&nbsp;";
    9.          };
    10. ?>
    Пожалуйста.
     
    #12 prohodiltut, 22 фев 2017
    Последнее редактирование модератором: 23 фев 2017