帕斯卡(Pascal)的三角形有效,但会引发通知

时间:2018-10-13 15:20:42

标签: php arrays for-loop notice pascals-triangle

这是我的剧本。当我执行$tri时,程序无法在$somma=$tri[$y]+$tri[$z];数组中找到值?

我不断收到通知,为什么?

<?php
$tri=array(1,1);
for ($x=0;$x<=6;$x++) {
    print_r($tri);
    $count=count($tri);
    $trinew=array();
    for($y=0;$y<$count;$y++) {
        $z=$y+1;
        $somma=$tri[$y]+$tri[$z];    // <-- here is the problem
        array_push($trinew,$somma);
    }
    array_unshift($trinew, 1);
    $tri=$trinew;
}
?>

1 个答案:

答案 0 :(得分:0)

$y = $count - 1时,则$z = $count,并且从$tri[$z]开始就没有可用的元素。

例如,在$x的第一次迭代中,$tri为:

array (
  0 => 1,
  1 => 1,
)

$y = 0$z = 1都很好时,但是当嵌套的for()移至其最终迭代($y = 1$z = 2)时,{{1 }}没有$tri索引。

这就是为什么您收到通知的原因。


使用空合并运算符和一些其他小的修饰,似乎运行平稳:

代码:(Demo

2

或者您可以将$tri = [1, 1]; for ($x = 0; $x <= 6; ++$x) { var_export($tri); $trinew = [1]; for($y = 0, $count = count($tri); $y < $count; ++$y) { $z = $y + 1; $trinew[] = $tri[$y] + ($tri[$z] ?? 0); } $tri = $trinew; } 元素推入内部for循环之前的0中,并从$tri中减去1。 https://3v4l.org/sWcrr