while循环输出到数组?

时间:2017-11-28 21:59:46

标签: php arrays

我知道这可能是一些PHP 101的东西,但我在这里做PHP 101,我不知道如何处理这个问题。我有一个简单的脚本,它将Fibonacci序列产生到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的新手,我真的不确定如何继续前进。

4 个答案:

答案 0 :(得分:2)

简单代码:

// ...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>'; 

答案 1 :(得分:1)

<?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循环减少为空语句。这是一个为Fibonacci序列生成项目数组的函数:

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);
}

答案 2 :(得分:1)

递归对于这个任务来说可能有点过头了,但我想我会玩它并编写一个不使用任何数组的方法。

代码:(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

答案 3 :(得分:0)

使用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>