2013-12-23 3 views
1
for ($i=40; $i>=30; $i--) //code will display data for top x row 
for ($i=1; $i<=9; $i++) //code will display data for left y column 
for ($i=29; $i>=21; $i--) //code will display data for bottom x row 
for ($i=30; $i>=39; $i++) //code will display data for right y column 

Эти 4 петли все делают то же самое. В моем index.php im используется «включить», чтобы получить 4 цикла, которые находятся в 4 разных файлах. Как создать динамический цикл for?Как настроить динамические параметры для цикла

Algoritihm:

$i = (40,1,29,30) <--will be any of those 4 
$maxlow = (30,9,21,39) 
$check =(>,<)  <--value depends on whether $i > or < $maxlow 
$icrement = (--,++) <-- if $check is > then decrease, otherwise increment 

for ($i; $i($check)=$maxlow; $i($increment) <---what i am trying to do 

ответ

0

Настройки для данного цикла:

$diff = -1; 
$start = 40; 
$stop = 30 + $diff; 

Сама петля, всегда так:

for ($i = $start; $i != $stop; $i += $diff) 
+0

Привет, Roman, цикл for будет запущен в myfunction(), так как я могу передать переменные $ diff, $ start, $ stop в качестве параметров? Или что является лучшим способом сделать их доступными для myfunction(). –

+1

, когда вы объявляете функцию myfunction ($ diff, $ start, $ stop), а затем вызываете ее так же, как –

+0

Ха-ха, да, спасибо, я понял это сам. Но по-прежнему ценим ответ. –

3
// $step is either 1 (incrementing) or -1 (decrementing) 
foreach (range($begin, $maxlow, $step) as $i) { 

} 
+0

Я не совсем понимаю ваш ответ. Может быть, вы можете объяснить немного больше? –

+0

Посмотрите на странице руководства для функции [range()] (http://php.net/range) - она ​​генерирует массив значений, которые будут итерированы. Это очень приятное решение для ваших нужд. –

0
$low = [40,1,29,30](rand(0,3); 
$high = [30,9,21,39](rand(0,3); 
$modifier = ($low > $high) ? -1 : 1; 

for($i = $low; ($i * $modifier) < ($high * $modifier); $i += $modifier) 
{ 
    doStuff(); 
} 
+0

no $ low, $ hi (должно быть 1 переменная) не будет выбрано случайным образом, но это значение зависит от того, будет ли im делать верхнюю строку, нижнюю строку, левую колонку или правый столбец –

0

почему бы не использовать для с переключателем внутри, как это:

for ($i=1; $i >=39; $i++) { 
    switch($i) { 
     case ($i>=1 && $i<=9): 
     break; 
     ... 
     ... 
     case ($i>40): 
     //do something 
     break; 
    } 

} 

Это будет гораздо более удобным для чтения, и легче понять/редактировать в будущем.

Смежные вопросы