如何在for循环中创建数组并在forloop之外访问该数组

时间:2018-10-02 13:57:09

标签: php arrays laravel

我试图将值作为数组存储在for循环中,以便可以在循环外部访问它们。

foreach ($doctor->booking as $booking) {
    $bookeddate = date('Y-m-d', strtotime($booking->booked_time));

    if( $bookeddate == $end_date ) {
        $booked_time[] = date('H:i a', strtotime($booking->booked_time));
    }
}

foreach ($booked_time as $key ) {
    echo $key;
}

此代码不断给我一个错误"Undefined variable: booked_time"

6 个答案:

答案 0 :(得分:4)

尝试 在使用之前初始化$booked_time,因为它仅在函数内部具有作用域

$booked_time = [];
foreach ($doctor->booking as $booking) {
       $bookeddate=date('Y-m-d',strtotime($booking->booked_time));
           if($bookeddate==$end_date){
             $booked_time[]=date('H:i a',strtotime($booking->booked_time));
           }
 }

 foreach ($booked_time as $key ) {
      echo $key;
 }

答案 1 :(得分:1)

这不适用...

您创建的数组仅对该范围有效(这里对您的FOREACh有效)。

一旦您退出该范围,就会出现数组变量。 解决方案- 在可以访问两个foreach的全局范围内声明数组。

答案 2 :(得分:1)

您应该做的三件事:

  1. 在循环之前将变量$ booked_time初始化为空数组:然后确保始终在循环之前定义一个数组,如下所示: $booked_time = [];-这将使错误消失

  2. 验证$ end_date实际上有一个值(该定义未包含在您的代码段中),因此有一些要比较的地方

  3. 如果确实具有值,请确保$ end_date的格式与bookeddate一样,格式为date(“ Ymd”),因为您正在进行字符串比较,其中date(“ Ymd”)与date不同(“ Ymd”),即使他们指的是同一天

答案 3 :(得分:0)

由于块作用域的概念,这是不可能的。您可以阅读有关PHP here中的变量作用域的更多信息。

通常,这意味着大括号内声明的每个变量只能在此代码块中访问。

解决此问题的最简单方法是预先创建一个空数组,如下所示:

$booked_time = [];

foreach ($doctor->booking as $booking) {
   $bookeddate=date('Y-m-d',strtotime($booking->booked_time));
       if($bookeddate==$end_date){
         $booked_time[]=date('H:i a',strtotime($booking->booked_time));
       }
 }

 foreach ($booked_time as $key ) {
      echo $key;
 }

答案 4 :(得分:0)

在for循环外创建数组。

然后使用array_push()将元素添加到数组中

可能的解决方案

$booked_times = [];

foreach ($doctor->booking as $booking) {
    $bookeddate = date('Y-m-d',strtotime($booking->booked_time));

    if($bookeddate==$end_date){
        array_push($booked_times, date('H:i a',strtotime($booking->booked_time));
    }
}

foreach ($booked_time as $key ) {
    echo $key;
}

答案 5 :(得分:0)

您可能要考虑使用集合。它们真的很酷,您可以使用许多方法。 https://laravel.com/docs/5.7/collections。 我将使用上面您喜欢的帖子中的代码,并将数组更改为集合。

$booked_time = collect();
foreach ($doctor->booking as $booking) {
       $bookeddate=date('Y-m-d',strtotime($booking->booked_time));
           if($bookeddate==$end_date){
             $booked_time->push(date('H:i a',strtotime($booking->booked_time)));
           }
 }

 foreach ($booked_time as $key ) {
      echo $key;
 }