问题描述
我不明白为什么 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();
正如@AbraCadaver 所建议的,如果应该始终填充它,您也可以从构造函数调用它:
public function __construct(int $seq_value)
{
$this->seq_value = $seq_value;
$this->fibonacci_sequence(); // <---------- ADD HERE
}