【问题标题】:Output of while loop to array?将while循环输出到数组?
【发布时间】:2017-11-28 21:59:46
【问题描述】:

我知道这可能是一些 PHP 101 的东西,但我在这里做的是 PHP 101,我不确定如何处理这个问题。我有一个简单的脚本,可以生成 20 个位置的斐波那契数列,但我想将这些结果返回到索引数组中,然后找到这些结果的平均值。

代码如下:

<?php  
    $num = 0;  
    $n1 = 0;  
    $n2 = 1;  
    echo "<h3>Fibonacci series for first 20 numbers: </h3>";  
    echo "\n";  
    echo $n1.' '.$n2.' ';  

    while ($num < 19 ){  
        $n3 = $n2 + $n1;  
        echo $n3.' ';  
        $n1 = $n2;  
        $n2 = $n3;  
        $num = $num + 1;  
    };
?>  

我讨厌仅仅要求人们为我解决我的问题,但鉴于我对 PHP 很陌生,我真的不知道如何继续前进。

【问题讨论】:

  • 为了清楚问题,请说明您的预期输出。我查过斐波那契,但其他人可能不会打扰。
  • 当您四处寻找“如何在 PHP 中创建数组”时,您没有找到任何东西吗?

标签: php arrays


【解决方案1】:

简单代码:

// ...previous code

$result = array();
while ($num < 19 )  
{  
    $n3 = $n2 + $n1;  
    echo $n3.' ';  
    $n1 = $n2;  
    $n2 = $n3;  
    $num = $num + 1;
    // push to array $result
    $result[]= $n3;
};

echo '<h4>Average : '. array_sum($result) / count($result) .'</h4>'; 

【讨论】:

  • $result 缺少初始值 0 和 1。
【解决方案2】:
<?php  
$length = 20;
$fibs   = [0, 1];
for($i=2; $i<$length; $i++)
    $fibs[$i] = $fibs[$i-1] + $fibs[$i-2];

print implode(',', $fibs) . "\n";
printf(
    'The mean average of first %d fibonacci numbers is %f.',
    $length,
    array_sum($fibs)/$length
);

输出:

0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181
The mean average of first 20 fibonacci numbers is 547.250000.

进一步我们可以将 for 循环简化为一个空语句。这是一个为斐波那契数列生成项目数组的函数:

function fibonacci_sequence($length)
{
    for(
        $fibs = [0, 1], $i = 2;
        $i < $length;
        $fibs[$i] = $fibs[$i-1] + $fibs[$i-2], $i++
    );

    return array_slice($fibs, 0, $length);
}

【讨论】:

    【解决方案3】:

    对于这个任务来说,递归可能是多余的,但我想我可以玩一下它并编写一个不使用任何数组的方法。

    代码:(Demo)

    function fibonacci($iterations,$carry=1,$last=0){
        if(--$iterations>1){$carry+=fibonacci($iterations,$carry+$last,$carry);} // control iterations & recurse
        return $carry;                                                           // return the sum
    }
    $stop=20;
    echo fibonacci($stop)/$stop;                                                 // call function
    

    输出:

    547.25
    

    【讨论】:

      【解决方案4】:

      使用 array_push() 函数将一个或多个元素插入到数组的末尾。

       <pre>
      
      <?php 
      
      $num = 0;  
      $n1 = 0;  
      $n2 = 1;  
      $arr=array();
      echo "<h3>Fibonacci series for first 20 numbers: </h3>";  
      echo "\n";  
      echo $n1.' '.$n2.' ';  
      array_push($arr, $n1);
      array_push($arr, $n2);
      while ($num < 18 )  
      {   
          $n3 = $n2 + $n1;  
          array_push($arr, $n3);
          echo $n3.' ';  
          $n1 = $n2;  
          $n2 = $n3;  
          $num = $num + 1; 
      
      };
      echo "<br>";
      
      print_r($arr);
      $Average= array_sum($arr);
      $Average=(int)($Average / count($arr));
      echo $Average;
      
      ?>
      
          </pre>
      

      【讨论】:

      • 你查看$arr了吗?它缺少一些值不是吗?
      • 我认为他的斐波那契数列以 0,1 或 1,1 开头。你的从 1,2 开始。
      • 您的$arr 仍然是错误的。
      • 现在您的 $arr 包含 21 个元素。
      • 真的非常感谢你。要注意我的回答。我对此了解更多。抱歉粗心
      猜你喜欢
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      相关资源
      最近更新 更多