За последние 24 часа нас посетили 23536 программистов и 1549 роботов. Сейчас ищут 985 программистов ...

Не могу понять почему тело цикла выполняется 1 раз.

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

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте. Подскажите, пожалуйста, почему тело этого цикла выполняется 1 раз вне зависимости от переменной $nums?
    Код (PHP):
    1.     for ($i = 0; $i <= $nums; $i++){
    2.         $item_key = array_rand ($list);
    3.         $item = $list[$item_key];
    4.         if ($item[0] == 'money'){
    5.             mysql_query("UPDATE `money` SET `money` = money+".$item[1]." WHERE `name` = '$username'");
    6.             return("Открыв кейс, вы получили <b>".$item[1]."</b> рублей на счёт.");
    7.         } else {
    8.             $row_items = mysql_fetch_assoc(mysql_query("SELECT * FROM `sale` WHERE `block_id` = '{$item[0]}'"));
    9.             if (mysql_num_rows (mysql_query("SELECT * FROM `$server` WHERE `item_id` = '{$item[0]}' AND `nickname` = '$username'"))){
    10.                 mysql_query ("UPDATE `$server` SET `item_amount` = item_amount + {$item[1]} WHERE `nickname` = '$username' AND `item_id` = '{$item[0]}'");
    11.             } else {
    12.                 mysql_query ("INSERT `$server` VALUES ('', '$username', '{$item[0]}', '{$item[1]}', '{$row_items["image"]}', '{$row_items["name"]}', '{$row_items["price"]}', '', 'item', '1')");
    13.             }
    14.             return("Открыв кейс, вы получили <b>\"".$row_items["name"]."\"</b> в количестве <b>".$item[1]."</b> шт. на сервере <b>".$server.".</b> Увидеть ваш приз можно на складе в магазине блоков, либо в игре с помощью команды <b>/cart gui</b>.");
    15.         }
    16.     }
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ты знаешь что такое return?
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    так понимаю что она останавливает цикл, да? :) А как тогда так же вернуть значение, но продолжить работу цикла?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    во временную переменную с помощью конкатенации можно накапливать данные и потом их вернуть уже вне цикла
     
  5. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Вместо return используй echo
     
  6. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    А если я буду использовать echo, то смогу использовать что-то типа function a {
    echo x;
    }
    $m = a()
    ?
    --- Добавлено ---
    Хотя сделаю как denis01 предложил. Спасибо.
     
  7. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Тогда лучше используй конкатенацию во временную переменную
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Можно затащить на генераторы, тогда можно делать натуральный ретёрн (yield).
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    не цикл, а выполнение функции. Ну про генераторы уже сказали, но если с return сложности, генераторы тем более не поймёте. Складывайте в массив внутри функции, возвращайте массив