Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在while循环中使用数组_sum()_Php_While Loop - Fatal编程技术网

Php 在while循环中使用数组_sum()

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。无法理解为什么这段代码不起作用

特别是:为什么数组_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 ) {

 $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 )