2016-03-30 1 views
0
<?php 
    $customer = ["aa_","aa_","aa_","aa_"]; 
     $i = 0; 
     do{ 
     $customer[$i] = $customer[$i].$i; 
     $i++; 
     } while ($i === 4); 
     echo $i; //print only 1 
     var_dump($customer); 
    ?> 

$customer реальный выходdo while loop не работает, как я ожидал в `===` состоянии?

array (size=4) 
     0 => string 'aa_0' (length=4) 
     1 => string 'aa_' (length=4) 
     2 => string 'aa_' (length=4) 
     3 => string 'aa_' (length=4) 

Когда я использую while ($i < 4) работает .Но здесь я неправильно понять почему использование о состоянии получает только цикл за один раз ... Я думаю, что это должно быть

do $i++ -> 1 (1 === 4) loop again 
    do $i++ -> 2 (2 === 4) loop again 
    do $i++ -> 3 (3 === 4) loop again 
    do $i++ -> 4 (4 === 4) stop quit 

так как ожидается выход $customer

array (size=4) 
     0 => string 'aa_0' (length=4) 
     1 => string 'aa_1' (length=4) 
     2 => string 'aa_2' (length=4) 
     3 => string 'aa_3' (length=4) 
+2

Это действительно кажется, что вам нужно спать: P '(1 === 4) loop again' <- Я не думаю, что это помогает, если вы читаете его снова 10 раз, но' 1' никогда не было таким же, как '4'. Цикл выполняется снова, если условие оценивается как TRUE, поэтому 1,2,3 должны быть такими же, как 4, чтобы быть истинным. – Rizier123

+0

Также причина, по которой он изначально запущен, содержится в документации [_ Основное отличие от регулярных циклов состоит в том, что первая итерация цикла do-while гарантирована для запуска_] (http://php.net/manual/en/control -structures.do.while.php) – Bankzilla

+1

@ Rizier123 you r right,: (p) Я мог бы отдохнуть! Спасибо за ваше объяснение. –

ответ

1

Нет, ваша интерпретация неверна.

$i = 0 // Starting value 
do (Will do the action here) $i++ -> 1 
CONDITION (1 === 4) -> FALSE so it will not loop, (Stop the loop) so $i is only = 1; 

Если вы действительно хотите использовать равных в вашем состоянии, вы должны использовать !== (не равно), как это показано ниже:

$i = 0; 
do{ 
    $customer[$i] = $customer[$i].$i; 
    $i++; 
} while ($i !== 4); 

Так объяснение это

$i = 0 // Starting value 
do (Will do the action here) $i++ -> 1 
CONDITION (1 !== 4) -> TRUE (Loop continues) 
do (Will do the action here) $i++ -> 2 
CONDITION (2 !== 4) -> TRUE (Loop continues) 
do (Will do the action here) $i++ -> 3 
CONDITION (3 !== 4) -> TRUE (Loop continues) 
do (Will do the action here) $i++ -> 4 
CONDITION (4 !== 4) -> FALSE (Stops the loop) 
Final value of $i will be 4. 
+0

Я согласен с тем, что здесь сказано ... собирался ответить тем же, но был слишком медленным .. :) –