变量变为0时无法停止代码执行

时间:2018-01-22 06:21:31

标签: php

我正在编写此代码以分发给定号码。没有给客人和孩子。有以下条件的房间:

  1. 一间客房不得超过4位客人,包括成人和儿童。
  2. 如果客房有4位客人,客人将被安排在隔壁房间,最多3人。
  3. 客人可以选择在一间客房内安排少于4位客人,在这种情况下,可以在一间客房内分配少于4位客人。
  4. 代码:

    $adults = 5;
    $childs = 4;
    $rooms = 3;
    
    $dist = distGuests($adults, $childs, $rooms);
    
    function distGuests($adults, $childs, $rooms) {
        $dist = array();
        $i = 0;
        $j = 1;
        for ($i = 0; $i < $rooms;) {
            if ($adults) {
                $dist['adults'][$i] +=  $j;
                $adults--;
            }
            if ($childs) {
                echo 'Hi!<br>';
                $dist['childs'][$i] += $j;
            } else {
                echo 'Bye!<br>';
            }
            $childs--;
            if (($dist['adults'][$i] + $dist['childs'][$i]) == 4) {
                $i++;
            }
        }
        return $dist;
    }
    

    这应该打印如下:

    Array
    (
        [adults] => Array
            (
                [0] => 2
                [1] => 2
                [2] => 1
            )
    
        [childs] => Array
            (
                [0] => 2
                [1] => 2
            )
    
    )
    

    但它打印如下,即$ child变为0时代码执行不停止:

    Array
    (
        [adults] => Array
            (
                [0] => 2
                [1] => 2
                [2] => 1
            )
    
        [childs] => Array
            (
                [0] => 2
                [1] => 2
                [2] => 3
            )
    
    )
    

    请告诉我这里缺少什么?

    谢谢,

1 个答案:

答案 0 :(得分:2)

你应该移动

 $childs--;

以下

 $dist['childs'][$i] += $j;

因此它在if语句中并且不总是被调用(这使得它的值低于0)

在for循环结束时

添加:

if(!($adults) and !($childs) ){
    break;
}