首页 > 解决方案 > 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();

标签: phparraysclassmethodsforeach

解决方案


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

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

演示

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

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

推荐阅读