За последние 24 часа нас посетили 34485 программистов и 1693 робота. Сейчас ищут 674 программиста ...

Прогрессия в цикле

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

  1. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Привет всем
    Есть цикл такого типа
    PHP:
    1. $arr = array(10,10,10,10,10);
    Хочу получить так
    PHP:
    1. $arr = array(10,20,30,40,50);
     
  2. denis01

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

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

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Da из первого надо создать другой
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну можно пройтись по первому массиву отсчитывая кол-во итераций цикла и умножать значение на номер итерации.
     
  5. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Это в примере легкие цифры , на деле может быть 17,1187.54, 21.12335 и т д
    Просто нужно к второму прибавить первую, к третьему вторую
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну прибавьте. В чём сложность? Циклом for со второго элемента (у него будет индекс 1) до последнего (count($arr) - 1), и к каждому прибавлять предыдущий
     
  7. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    PHP:
    1. for($i=1;$i<count($arr) - 1;$++){
    2. $a[]= $i+
    3. }
    А дальше как ?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Сразу всю задачу опиши, это же не IQ тест
     
  9. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Есть массив x,y,z и хочу получить другой массив x, x+y, x+y+z
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    сложность в том, что это студенты бухали весь семестр, а теперь у них зачеты и они нихрена не знают. Ходят по форумам толпами со своими примитивными задачами о подсчетах суммы двух чисел с использованием серверных подсчетов и двумя редиректами ^_^

    это нужно сразу объяснять.

    PHP:
    1. $arr=array(10,10,10,10,10);
    2. $cont=0;
    3. for ($i = 0; $i < count($arr); $++) {
    4. $newArr[] = $arr["$i"] + $cont;
    5. $cont = $arr["$i"];
    6. }
    теперь в $newArr твой новый массив...
    --- Добавлено ---
    Так ты задачу описал в первый раз не правильно! не будет мой код работать..
     
  11. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Тестировал на http://phptester.net/ ,получил
    PHP:
    1. Array ( [0] => 10000 [1] => 20000 [2] => 20000 [3] => 20000 )
    Может не очень легкая задача ?
     
  12. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    PHP:
    1. $arr=array(10,10,10,10,10);
    2.  
    3. $cont=0;
    4.  
    5. for ($i = 0; $i < count($arr); $++) {
    6.  
    7. $newArr[] = $arr["$i"] + $cont;
    8.  
    9. $cont = $cont + $arr["$i"]; // эту строку только подправил. Вроде, так будет норм...
    10.  
    11. }
     
    shalx shalx нравится это.
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    PHP:
    1. $d = 0;
    2. foreach ($arr as &$x )  $d = ($x += $d);
     
    #13 artoodetoo, 13 май 2016
    Последнее редактирование модератором: 13 май 2016
    mr.akv и mkramer нравится это.
  14. shalx shalx

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

    С нами с:
    13 май 2016
    Сообщения:
    38
    Симпатии:
    0
    Спасибо
     
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    в первом случае ошибся. Без отладки никуда :)

    правильно вот так:
    PHP:
    1. $arr=array(10,10,10,10,10);
    2. $cont=0;
    3.  
    4. for ($i = 0; $i < count($arr); $i++) {
    5.    
    6. $newArr[] = $arr["$i"] + $cont;
    7.    
    8. $cont = $newArr["$i"];
    9.    
    10. }
    11.  
    12. for ($i = 0; $i < count($arr); $i++) {
    13.    
    14.     echo "{$newArr["$i"]}<br />";
    15.    
    16. }
     
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Нафига $i в кавычках?


    @artoodetoo, браво
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    хз... как то так повелось с самого начала... индексы в одинарных ковычках, переменные, содержащие индексы в двойных...
     
  18. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ошибка. как ни странно — нет
     
    #18 artoodetoo, 13 май 2016
    Последнее редактирование: 13 май 2016
  19. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    "Линус Торвальдс играет в 3D-игры, мысленно выполняя их исходные коды в реальном времени."
    а тебе рано еще программировать в уме, я считаю. проверяй себя.


    ты в праве это делать
     
  20. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    в чем ошибка? почему тогда работает?
     
  21. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ошибка в расстановке кавычек.
    И вообще, echo $x всегда и удобнее, и быстрее, чем echo "$x"
     
  22. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну может я погорячился, выглядит это странно.
    сам я избегаю делать неэкранированные кавычки внутри кавычек.
     
  23. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    "{$newArr[\"$\i"]}<br />"
    Серьезно? ;) Ты так пишешь? ;)
     
  24. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ты чтоли меня троллишь, @MiksIr? теперь я вынужден оправдываться перед тобой :)
    на другом форуме я бы просто послал тебя в жопу, но у нас вежливое место. поэтому отвечу:
    я бы не стал окружать переменную-индекс кавычками. имея в виду это, в 100% случаев я бы экранировал внутренние кавычки.

    Код (PHP):
    1. echo "{$newArr[$i]}<br />";
    2. echo $newArr[$i]."<br />";
    3. echo "this \"string\" is double quoted<br>";
    так устраивает?
     
  25. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    я, честно говоря, до сих пор вообще не знал, что внутри "{}" допустимо ставить неэкранированные двойные кавычки. это какой-то особый случай, век живи, век учись!

    вот так вот я писал, с другими кавычками, которые незачем экранировать:
    Код (PHP):
    1. echo "ололо {$arr['offset']} пыщпыщь <br />";