2016-08-12 2 views
1

В настоящее время я пытаюсь применить текст к тому, имеют ли события внутри моей группы событий свободные или проданные пространства.Array не возвращает правильное значение

Моя петля просматривает каждое событие в группе событий и возвращает, будут ли они проданы или доступны для каждого конкретного события. Моя проблема в том, что он просто возвращает одно и то же значение для обоих событий, а не смотрит на каждое конкретное событие, чтобы оно возвращало неправильное значение.

Он добавляет их в массив и выводит каждый из них, но второе значение всегда неверно. Есть идеи?

Даже если второе событие ударилась это значение мощности, она по-прежнему показывает, как доступный

public function getAreEventsAvailableStringMultiple() { 
    $availability = null; 
    foreach ($this->events as $event) { 
     $availability[] = $this->getAreEventsAvailable() ? 'Spaces still available' : 'Sold Out'; 
    } 
    return implode(' <br/> ', $availability); 
} 

Другие функции

public function getAreEventsAvailable() { 
     foreach ($this->events as $event) { 
      if ($event->getRemainingCapacity() > 0) { 
       return true; 
      } 
     } 
     return false; 
    } 
+0

вызов одной функции на каждой итерации '$ this-> getAreEventsAvailable()'? Я думаю, что вам не хватает param '$ this-> getAreEventsAvailable ($ event)' – Thamaraiselvam

ответ

2

Вы итерация $this->events (который, вероятно, является массив объектов событий), но проверка наличия на $this, что означает текущий объект.

Если $this->events является массив объектов, то вы должны сделать это:

foreach ($this->events as $event) { 
     $availability[] = $event->getAreEventsAvailable() ? 'Spaces still available' : 'Sold Out'; 
    } 

Предполагая, что ваш объект Event имеет getAreEventsAvailable() метод.

Если $this->getAreEventsAvailable() возвращается доступность для всех событий, нет необходимости в цикле foreach, просто присвоить результат $availability:

$availability = $this->getAreEventsAvailable(); 

EDIT: Ваш getAreEventsAvailable() должен выглядеть следующим образом:

public function getAreEventsAvailable() { 
    $availability = []; 

    foreach ($this->events as $event) { 
     if ($event->getRemainingCapacity() > 0) { 
      $availability[] = true; 
     } else { 
      $availability[] = false; 
     } 
    } 

    return $availability; 
} 

, а затем в вашей getAreEventsAvailableStringMultiple() функции:

public function getAreEventsAvailableStringMultiple() { 
    $availability = []; 

    foreach ($this->getAreEventsAvailable() as $eventAvailable) { 
     $availability[] = $eventAvailable ? 'Spaces still available' : 'Sold Out'; 
    } 
    return implode(' <br/> ', $availability); 
} 

Это не самое элитное решение, но оно должно работать.

+0

Я обновил свой вопрос с помощью другой функции. Возвращает только один результат с вашим предложением. – DevAL

+0

'return' означает« выйти из функции и вернуть это значение ». Поэтому после первого выполнения вашего цикла он возвращает значение и завершает работу. Я обновил свой ответ. –

+0

удивительные ура. – DevAL