为什么我的PHP脚本以循环结束?

时间:2016-06-23 16:08:12

标签: php

我写了一个简单的PHP脚本,应该打印320个随机生成的年龄。这些年龄应成对生成,并应计算年龄之间的差异。我写了下面的代码,除了getDifference函数之外的所有东西都可以。如果我退出该功能,将生成320岁。

但如果我把功能留在其中:

  

1)不能正常工作
  2)长循环驻留
  3)有时打印出来   4岁而不是320岁。

我需要一些帮助。

    <?php
//Minimum of the age range.
$min = 8;

//Maxium of the age range.
$max = 25;

//Generating the ages
for ($i=0;$i<160;$i++) {
  $age1= random_float($min,$max);
  $firstage= round($age1,1);
  $age2= random_float($min,$max);
  $secondage=round($age2,1);
  $diff = getDifference ($age1, $age2);
  print "Age 1: $firstage  Age 2: $secondage Difference: $diff \n ";

}

//Function to generate a random float number
function random_float ($min,$max) {
   return ($min+lcg_value()*(abs($max-$min)));
}

// Function to calculate the differences between the ages in years and months
function getDifference ($age1, $age2) {
  $difference = abs($age2 - $age1);
  $jaar = 0;
  $newdifference = round($difference,1) * 12;
  for ($newdifference; $newdifference >=12; $newdifference -12) {
    $jaar ++; }
  $month = $newdifference - 12*$jaar;
  $newmonth = floor($month);
  $test = "$jaar years and $newmonth months";
  return $test;
}
?>

3 个答案:

答案 0 :(得分:2)

在这个循环中:

for ($newdifference; $newdifference >=12; $newdifference -12) {
    $jaar ++;
}

两件事:

首先,您不需要第一个循环条件语句。该变量已经存在,无需声明:

for (; $newdifference >=12; $newdifference -12) {
    $jaar ++;
}

其次,您永远不会在循环中修改$newdifference。基本上,第三个循环条件语句($newdifference -12)实际上并没有任何事情。它减去12,但对减法的结果没有做任何事情。因此,如果循环开始(因为条件为true),那么永远不会结束(因为条件将始终为true)。也许你打算修改最后一个循环条件语句中的值?:

for (; $newdifference >=12; $newdifference -= 12) {
    $jaar ++;
}

答案 1 :(得分:1)

因为你没有在你的for循环中增加你的$i,所以它陷入了循环:

替换:

for ($newdifference; $newdifference >=12; $newdifference -12)

人:

for ($newdifference; $newdifference >=12; $newdifference -= 12)

您需要使用-=代替-,否则它不会更新$newdifference的值,它只会返回结果方程。

答案 2 :(得分:1)

你根本没有改变$ newdifference。你的for循环应该是

for($newdifference; $newdifference >= 12; $newdifference -= 12) {

这会使$newdifference减少12。