Условие while-Else PHP

Я знаю, что мой вопрос может быть похож на а еще заявление? PHP. Однако это решение, похоже, не работает в моем случае.

So, in my case is something like this.

  1. Я делаю запрос select из базы данных, чтобы получить все записи, затем получаю result in array
  2. Я получаю total и period из массива
  3. Выполните проверку, когда $qtyOut > $total, он будет зацикливать операторы внутри {}.
  4. Это проблема здесь, ПОСЛЕ ЗАВЕРШЕНИЯ ЦИКЛА, он должен выполнить оператор else (вызвать другую функцию).
    public function trialOut($id, $qtyOut)
        {
            $a = $this->uri->segment(3);
            $dataset = $this->m1->trial($a);
            $i = 0;
            $sisa;
            $total = $dataset[$i]['total'];
            $period = $dataset[$i]['periode'];
            if ($qtyOut > $total){
                while ($qtyOut > $total) {
                    $qtyOut = $qtyOut - $total;
                    $this->m1->updateOut2($period, $id);
                    $i++;
                    $total = $dataset[$i]['total'];
                    $period = $dataset[$i]['periode'];
                }
            } else{ //when while loop ends, i want it to execute the code here
                $sisa = $total - $qtyOut;
                $this->m1->updateOut1($period, $sisa, $id);
            }
        }

И я все еще не могу найти правильный способ сделать это, следует ли мне использовать другой метод цикла и как это сделать?

зачем вам if/else в таком случае? Что может пойти не так, если будет просто цикл while, а затем код в вашем текущем блоке else после (и вне) цикла, чтобы всегда выполняться после завершения цикла?

Robin Zigmond 04.11.2018 23:33

операторы внутри условия else будут выполнены, если только $qtyOut не больше, чем $total. cmiiw

Iwan 04.11.2018 23:41

но вы сказали, что хотите, чтобы они выполнялись после завершения цикла while - это означает, что вы также хотите, чтобы эти операторы выполнялись, если $qtyOut > $total (в этом случае сразу после цикла). [Я на самом деле еще не изучал ваш код и его намерения, кстати - я просто пытаюсь следовать логике того, о чем вы просите.]

Robin Zigmond 04.11.2018 23:43

ну тогда ты прав, братан. У меня неправильное представление о заявлении while. это помогло, спасибо ...

Iwan 05.11.2018 00:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
1 139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оператор If - else работает по этой логике. если условие при условии, что оператор if истинен, будет выполнен код insde {} if (condition) {//this code is executed}. Однако, если будет выполнен код условие = ложь под else. Имея это в виду, ваш оператор else НЕ БУДЕТ выполняться, когда $qtyOut > $total.

Если вы хотите выполнить его после оператора if, просто удалите else и скобки.

Если вы хотите выполнить его после завершения, попробуйте это

public function trialOut($id, $qtyOut)
        {
            $a = $this->uri->segment(3);
            $dataset = $this->m1->trial($a);
            $i = 0;
            $sisa;
            $total = $dataset[$i]['total'];
            $period = $dataset[$i]['periode'];
            if ($qtyOut > $total){
                while ($qtyOut > $total) {
                    $qtyOut = $qtyOut - $total;
                    $this->m1->updateOut2($period, $id);
                    $i++;
                    $total = $dataset[$i]['total'];
                    $period = $dataset[$i]['periode'];
                }
                $sisa = $total - $qtyOut;
                $this->m1->updateOut1($period, $sisa, $id);
            } 
        }

If else explanation

Возьмите этот пример

x = 5;
if ( x = 5 ){
echo 'x is 5';
}
if ( x != 5){
echo 'x is not five'
}

тот же код, что и

x = 5;
if ( x = 5 ){
echo 'x is 5';
}else{
echo 'x is not five'
}

В первом случае вы проверяете, если x = 5, а затем, если x не равно 5. Во втором случае вы проверяете, является ли x = 5, и если это не так, тогда будет выполняться else

Другие вопросы по теме