Треугольник Паскаля работает, но выдает уведомления - PullRequest
0 голосов
/ 13 октября 2018

Вот мой сценарий.Программа не может найти значения в массиве $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 голосов
/ 13 октября 2018

Когда $y = $count - 1, тогда $z = $count, и никогда не будет элемента, доступного через $tri[$z].

Например, на первой итерации $x,$tri - это:

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

Когда $y = 0 и $z = 1 все хорошо, но когда вложенный for() переходит к своей последней итерации ($y = 1 и $z = 2), $tri не имеет 2 индекса.

Вот почему вы получаете Уведомления .


С оператором нулевого слияния и некоторыми другими незначительными штрихамикажется, что все идет гладко:

Код: ( Demo )

$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;
}

Или вы можете вставить элемент 0 в $tri до того, каквнутренний цикл и вычесть 1 из count().https://3v4l.org/sWcrr

...