Foreach 只返回数组的第一个值

问题描述

我不明白为什么 foreach 只返回 $even_values 数组中的第一个值:

这是我在 fibonacci_sequence 方法上打印可读时 $this->sequence 数组的值:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 8 [5] => 13 [6] => 21 [7] => 34 [8] => 55 [9] => 89 )

所以我尝试在 fibonacci_sequence 方法上使用 even_values 方法的返回数组。

完整代码如下:

class fibonacci {

    private $seq_limit;
    private $sequence = array(1,2);
    private $even_values = array();

    public function __construct(int $seq_limit){
    $this->seq_limit= $seq_limit;
    }

    
    public function fibonacci_sequence(){
       for ($i=0; $i<=$this->seq_limit-3; $i++) { 
        $this->sequence[] = $this->sequence[$i] + $this->sequence[$i+1];
       } 
       return $this->sequence;
       //print_r($this->sequence);
    }

    public function even_values(){
        foreach ($this->sequence as $value) {
            if ($value % 2 == 0) {
                $this->even_values[] = $value;
            }
        }
        //return $this->even_values;
       print_r($this->even_values);
    }


 }


 $fibonacci = new fibonacci(10);
 $fibonacci->even_values();

解决方法

您似乎忘记调用 $fibonacci->fibonacci_sequence(); 方法来更改 $sequence 数组,所以这样做:

$fibonacci = new fibonacci(10);
$fibonacci->fibonacci_sequence();
$fibonacci->even_values();

demo

正如@AbraCadaver 所建议的,如果应该始终填充它,您也可以从构造函数调用它:

public function __construct(int $seq_value)
{
    $this->seq_value = $seq_value;
    $this->fibonacci_sequence(); // <---------- ADD HERE
}