За последние 24 часа нас посетили 16126 программистов и 1666 роботов. Сейчас ищут 876 программистов ...

Просумировать данные массива

Тема в разделе "PHP для новичков", создана пользователем lemonl, 16 ноя 2016.

  1. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Здравствуйте,

    Как правильно просуммировать данные в массиве ?

    Код (Text):
    1. <?
    2.    for($s=1; $s<=count($tpfix); $s++) {
    3.       $arr += $tpfix[$s];
    4.    }
    5. ?>
    Что бы не было такой ошибки :

    expects parameter 1 to be array, double given in
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    есть весь текст ошибки и весь файл в котором она происходит?
     
    MouseZver нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    array_sum ( $tpfix ) помоему
    --- Добавлено ---
    count($tpfix)

    count считает каждый скажем раздел в массиве, то бишь:
    PHP:
    1. [
    2.    0 => 'a',
    3.    1 => 'b',
    4.    2 => 'c',
    5.    3 => 'd'
    6. ]
    четыре раздела, дальше что...
    for($s=1;
    задается не с нуля а с единицы, это = $tpfix[$s]; где $s = 1 тоесть уже перепрыгиваем нулевой раздел... но count посчитал 4!!
    интересно..
    когда прокручивается 4 раз цикл вот тут $tpfix[4] = фуй, такого значения нема.
    потом вопрос встал... а там вообще не строковое значение место объявленного в массив? :eek:
     
  4. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Код (Text):
    1. $data = array(1,2,3,10,6,1,4,5,6,7,42,30,38);
    2.  
    3.    for($s=0; $s<count($data); $s++) {
    4.       $arr += $data[$s];
    5.    }
    6.  
    7. $result = 0;
    8.     $max = reset($arr);
    9.     foreach($arr as $v) {
    10.         if($v > $max) { $max = $v; }
    11.     }

    Ошибка :
    reset() expects parameter 1 to be array, double given in
    и
    Invalid argument supplied for foreach() in
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    ну и? все правильно, а читать не хотим
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @lemonl на каких строках происходит ошибка? у тебя в тексте ошибки, после in нету номера строки
     
  7. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    on line 8
    и
    on line 9

    Я питался разобраться, нужно как-то массив global обьявить ! То-есть я так понимаю не успевает заполнить новый массив ?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    у тебя $arr не массив совсем

    что по твоему делает операция += ?
    --- Добавлено ---
    во вторых
    в третьем посте уже ответил
     
  9. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0


    Мне нужно в массив $arr записать поочередную сумму.... Это $arr += $data[$s]; аналог этого $arr = $arr + $data[$s]
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
  11. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Код (Text):
    1. $data = array(1,2,3,10,6,1,4,5,6,7,42,30,38);
    2.   for($s=1; $s<count($data); $s++) {
    3.   $arr = array_sum ( $data[$s] );
    4.   }
    5. $result = 0;
    6.   $max = reset($arr);
    7.   foreach($arr as $v) {
    8.   if($v > $max) { $max = $v; }
    9.   }
    Но ведь такой вариант не работает ! Что здесь не так ?
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    выучить
    Код (Text):
    1. reset() expects parameter 1 to be array, double given in
    2. и
    3. Invalid argument supplied for foreach() in
    --- Добавлено ---
    тут не будут делать все за тебя. сам должен понимать свои ошибки
     
  13. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    когда вот так непонятно, самое простое - это дописать к каждой строчке комментарий, что она делает.
    даже самые опытные инженеры так делают.
     
  14. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Братишь, то, что ты назвал переменную сокращением, от слова array (массив) еще не делает её массивом. Ты загоняешь в одну переменную все значения в цикле. Я несколько раз перечитал тему и не понял чего ты на самом деле хочешь. Просуммировать значения массива?
    Вот этот кусок кода делает это.
    PHP:
    1.  
    2. for($s=0; $s<count($data); $s++) {
    3.       $arr += $data[$s];
    4.    }  // В переменной $arr на выходе получается сумма всех элементов массива.
    Сформулируй нормально чего ты хочешь.
     
  15. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    Если я правильно понял то, что ты хочешь.
    Вместо 3-ей строки в тело цикла вставь:
    PHP:
    1. if(count($arr) === 0){
    2.     $arr[] = $data[$s];
    3. } else {
    4.     $arr[] = $arr[count($arr) - 1] + $data[$s];
    5. }
    и объяви $arr до цикла.
    PHP:
    1. $arr = [];