【问题标题】:Foreach is only returning the first value of an arrayForeach 只返回数组的第一个值
【发布时间】:2021-08-22 19:58:15
【问题描述】:

我不明白为什么 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 )

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

这里是完整的代码:

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();

【问题讨论】:

  • $this-&gt;sequence 是一个值为 1 和 2 的数组。这两个数组中只有一个是偶数,因此您只能将其中一个 (2) 添加到 this-&gt;even_values,即输出。你有什么疑问?
  • 你是不是想在某个时候给fibonacci_sequence打电话?

标签: php arrays class methods foreach


【解决方案1】:

您似乎忘记调用$fibonacci-&gt;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
}

【讨论】:

  • 是的,或者如果应该始终填充它,则从构造函数中调用它。
  • 这是我在 fibonacci_sequence 方法上打印可读时的 $this->sequence 数组的值。数组 ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 8 [5] => 13 [6] => 21 [7] => 34 [8] => 55 [9] => 89 ) 所以我尝试在 even_values 方法上使用 fibonacci_sequence 方法的返回数组。
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2014-07-05
  • 2012-04-10
  • 2020-01-08
  • 2012-01-01
相关资源
最近更新 更多