PHP循环时间

时间:2010-12-28 16:36:50

标签: php timeslots

这是我第一次尝试使用面向对象的编程。我正在尝试从数据库重复时间段,但我只得到一个结果。

时间表包含:

10:00:00  
10:15:00
10:30:00
PHP类中的

 class booking {
     function __construct($mysqli) { 

     }

     function get_timeslot() {
         global $mysqli;

         $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

         while($r = $q->fetch_array(MYSQLI_ASSOC)) :
             return $r['times'];
         endwhile;

         $mysqli->close();
     }
 }

在网页中显示循环次数:

 $booking = new booking($mysqli);

 <?php echo $booking->get_timeslot(); ?>

结果:

10:00:00

6 个答案:

答案 0 :(得分:4)

return返回函数的值,因此只返回1个值。尝试

echo $r['times'].'<br/>';

 function get_timeslot(){
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
     $timeSlots = array();

     while($r = $q->fetch_array(MYSQLI_ASSOC))
     {
         $timeSlots[] = $r['times'];
     }

     $mysqli->close(); 
     return $timeSlots;
 }

答案 1 :(得分:1)

return语句使while循环不再继续,并退出该函数。您需要修改函数以返回时隙数组,或者修改逻辑以仅期望数据库中的第一个结果。

答案 2 :(得分:1)

return语句将立即退出该函数。而是返回你应该将项添加到数组而不是返回整个数组:

class booking {

 function __construct($mysqli){}

 function get_timeslot(){
  global $mysqli;
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

      while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $res[] = $r['times'];
      endwhile;
  $mysqli->close();
  return $res; 
 }
}

答案 3 :(得分:1)

 function get_timeslot() {
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

     while($r = $q->fetch_array(MYSQLI_ASSOC)) :
         // Cast to array
         $t[] = $r['times'];
     endwhile;

     $mysqli->close();
     // Return Array
     return $t;
 }


 // Calling the function
 $booking = new booking($mysqli);
 // Add print_r() as the return is now in an array format
 echo "<pre>".print_r($booking->get_timeslot(),true)."</pre><br />\n";

答案 4 :(得分:1)

因为你正在使用return $ r ['times'];在循环中。

这可以解决您的问题:

function get_timeslot(){
  global $mysqli;
  $returnArray = array();
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
  while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $returnArray[] = $r['times'];
  endwhile;
  $mysqli->close(); 
  return $returnArray; // now that all results are fetched from DB, return array containing them
}

另外请注意,在类方法中使用global关键字或在任何地方使用我不可取的,因为全局范围允许任何进程访问和更改全局变量。 我建议你尝试使用其他方法访问你的数据库对象(对象注册表,受保护的属性......)

同样使用while循环的替代语法(while():... endwhile;)不是很易读,但人们可以就此辩论。

答案 5 :(得分:0)

试试这个:

class booking {
function __construct($mysqli){}
function get_timeslot()
{
    global $mysqli;
    $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
    $return = '';
    while ($r = $q->fetch_array(MYSQLI_ASSOC)) :
        $return.= $r['times'] . '<br/>';
    endwhile;
    $mysqli->close();
    return $return;
}}