<?php
function sanjiao($hang){
    for($i=1;$i<=$hang;$i++){
     for($k=1;$k<=$hang-$i;$k++){
         echo "&nbsp;&nbsp;";//空格用 &nbsp; 表示
     }//此for循环输出每行前面的空格
        for($j=1;$j<=$i;$j++){
            $sj[$i][1]=1;//每行第一个为1
            if ($i==$j)
             $sj[$i][$j]=1;//每行最后一个为1
            else
             $sj[$i][$j]=$sj[$i-1][$j-1]+$sj[$i-1][$j];
            echo $sj[$i][$j];
            echo "&nbsp;&nbsp;";//每输出一个数跟着输出两个空格来形成金字塔
        }//此循环输出数字
        echo "<br>";
    }
}
sanjiao(5);
?>
最后输出的结果是:        1  
      
Notice: Undefined offset: 0 in D:\wamp\www\1\file.php on line 13
1  1  
    
Notice: Undefined offset: 0 in D:\wamp\www\1\file.php on line 13
1  2  1  
  
Notice: Undefined offset: 0 in D:\wamp\www\1\file.php on line 13
1  3  3  1  Notice: Undefined offset: 0 in D:\wamp\www\1\file.php on line 13
1  4  6  4  1  
这个怎么搞的??

解决方案 »

  1.   

    在第一个for前面加上$sj = array();试一下notice不影响程序执行,是个语法不够规范的通知
      

  2.   

    更改了PHP.ini 不提醒Notice了
      

  3.   


     $sj[$i][$j]=$sj[$i-1][$j-1]+$sj[$i-1][$j];//这是如果$i或$j是1的话,减去1后就是0,而$sj这个数组中是没有设置下标为0元素的,故会出现notice可以将else语句改为elseif ($i!=1 and $j!=1)
                    $sj[$i][$j]=$sj[$i-1][$j-1]+$sj[$i-1][$j];
      

  4.   

    楼主的代码for循环台多了。看着有点晕,看这个结构如何 !<?php
    function bio($n, $k) {
    if($k == 1 || $n == $k)
    return 1;
    return bio($n-1, $k) + bio($n-1, $k-1);
    }
    function yanghui($row=5)
    {
    for($i = 1; $i < $row+1; ++$i) {
      for($j = 1; $j <= $i; ++$j)
         echo bio($i, $j)."&nbsp;";
         echo "<br />";
       }
    }
    yanghui(5);//输出5行 ;
    ?>