问答详情
源自:5-9 PHP中的算术运算符(2)

关于代码错误问题的纠正

这样才是正确的!

<?php
     $maxLine = 4; //每排人数
  $no = 17;//学生编号
     $line = ceil($no/$maxLine);
  $row = $no%$maxline?$no%$maxLine:$no%4;
 


  echo "编号<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置";
?>

提问者:Arvin_Deng 2016-03-10 20:48

个回答

  • _heyshadow
    2016-03-18 12:40:53

    源代码没错。

    首先我们理解一下rows的意思,rows指的是,你在第几个座位。比如例子中,每一行可以坐4个人,这里rows可以是1,2,3,4。这里我们先不考虑在第几行。

    因为我注意到你跟源码的差别主要是在这一句上边

      $row = $no%$maxline?$no%$maxLine:$no%4;

    那么我们就来聊聊这一句:这是一个三元运算,解读一下意思是:

    1. 当$no%$maxline运算结果不为0,那么$row = $no%$maxLine 也就是说,当座位号不可以被每排坐的人数整除,rows是座位号对每排人数的求余,即是说,你前边所有排都填满了,剩下你学号所在的这一排没有坐满,余出来的这些人坐最后一排,你这个学号在最后一排的第几个位置。

    2. 当$no%$maxline运算结果为0(也就是说,$no可以被$maxline整除,意思是刚好你这个学号的位置可以使得你和前边的人可以填满每一排。)这个时候,原本教程里的结果是$row = $maxLine,注意,这个maxLine指的是每一排可以坐的人数,因为你是最后一个人呀,所以你在本排的位置,确实是maxLine没有错,在这里也就是第四个位置。

    3. 接下来来考虑一下你的想法:$no%4;这是一个求余,按理来讲,当取到后边这个$no%4的时候,应该是在$no%$maxline=0的时候,由于$maxLine=4,那么此处你的结果也为0,仔细考虑一下,你能坐到第0个位置吗?实际上还是第四个位置。


  • fshang
    2016-03-10 21:16:17

    <?php 
         $maxLine = 4; //每排人数
      $no = 17;//学生编号
         $line = ceil($no/$maxLine);
      $row = $no%$maxline?$no%$maxLine:$maxLine;
     
    
      echo "编号<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置";
    ?>