Php 在while循环中使用数组_sum()
我正在学习PHP。无法理解为什么这段代码不起作用 特别是:为什么数组_sum($x)(1596)的结果大于$cap?也许我不理解while循环的本质,但在我看来(看一个print_r($x)),循环应该在实际执行之前缩短一步Php 在while循环中使用数组_sum(),php,while-loop,Php,While Loop,我正在学习PHP。无法理解为什么这段代码不起作用 特别是:为什么数组_sum($x)(1596)的结果大于$cap?也许我不理解while循环的本质,但在我看来(看一个print_r($x)),循环应该在实际执行之前缩短一步 <?php function fibonacci_sum($cap = 1000){ list( $cur, $nxt, $seq ) = array( 0, 1, array() ); while ( array_sum($seq) < $cap ) {
<?php
function fibonacci_sum($cap = 1000){
list( $cur, $nxt, $seq ) = array( 0, 1, array() );
while ( array_sum($seq) < $cap ) {
$seq[] = $cur;
$add = $cur + $nxt;
$cur = $nxt;
$nxt = $add;
}
return $seq;
}
$x = fibonacci_sum();
echo array_sum($x);
?>
任何见解都值得赞赏
最好的,
matt上次输入while循环主体时,总和小于
cap
。这就是while循环在所有主要语言中的工作方式。在这种情况下,当循环最后一次退出时,总和大于cap
。这样看:如果array\u sum($x)
小于$cap
,则while循环的主体将再次执行。因此,当while循环停止执行时,根据定义,while
顶部的条件将为false。(*)我想你应该说:
while ( array_sum($seq) + $cur < $cap ) {
while(数组总和($seq)+$cur<$cap){
这将在您超过$cap
之前停止,这似乎是您想要做的
(*)是的,是的,关于
break
语句效果的免责声明。简单的执行顺序
如果您添加一个小的变量观察程序,很容易看到这是如何发生的
while ( array_sum( $seq ) < $cap )
{
echo $cur, ' : ', array_sum( $seq ), '<br>';
$seq[] = $cur;
$add = $cur + $nxt;
$cur = $nxt;
$nxt = $add;
}
但是,函数返回数组有点奇怪。为什么不让它直接返回和呢?谢谢Peter,这很有道理。请欣赏它的清晰性。你是对的,函数最终应该只返回和。
while ( array_sum( $seq ) + $cur < $cap )