Как создать массив в цикле for и получить доступ к этому массиву вне forloop - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь сохранить значения в цикле 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 голосов
/ 02 октября 2018

Вы можете рассмотреть возможность использования коллекции.Они действительно крутые, и у вас есть доступ ко многим методам.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;
 }
0 голосов
/ 02 октября 2018

Три вещи, которые вы должны сделать:

  1. инициализировать переменную $ booked_time как пустой массив перед циклом: тогда вы всегда будете иметь массив, определенный перед циклом, как в: $booked_time = []; - ошибка исчезнет

  2. убедитесь, что $ end_date действительно имеет значение (определение не включено в ваш фрагмент кода), поэтому есть что сравнить

  3. если оно имеет значение, убедитесь, что $ end_date отформатировано как дата ("Ymd") так же, как bookeddate, потому что вы выполняете сравнение строк, где date ("Ymd") не совпадает сдата ("Ymd"), даже если они ссылаются на один и тот же день

0 голосов
/ 02 октября 2018

Это не применимо ...

Созданный вами массив действителен только для этой области (здесь это для вашего FOREACh).

Как только вы выйдете изВ этой области переменная массива будет удалена.РЕШЕНИЕ - Объявите ваш массив в глобальной области, где могут быть доступны оба foreach.

0 голосов
/ 02 октября 2018

создать массив вне цикла 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;
}
0 голосов
/ 02 октября 2018

Это невозможно из-за концепции области видимости блока.Вы можете узнать больше о области видимости переменных в PHP здесь .

Как правило, это означает, что каждая переменная, объявленная в фигурных скобках, доступна только в этом блоке кода.

Самый простой способ обойти эту проблему - заранее создать пустой массив, например:

$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;
 }
0 голосов
/ 02 октября 2018

попробуйте инициализировать $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;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...