2016-08-12 59 views
1

我正在尝试应用文本以确定事件组内的事件是否有可用空间或已售罄。数组未返回正确的值

我的循环查看事件组中的每个事件,并返回它们是否售罄或可用于每个特定事件。我的问题是,它只是为两个事件返回相同的值,而不是查看每个特定的事件,因此它返回错误的值。

它将这些添加到一个数组中,并将每一个爆炸掉,但第二个值总是错误的。有任何想法吗?

即使第二事件已经达到它的容量值,它仍然显示可用

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()'?我认为你缺少参数'$ this-> getAreEventsAvailable($ event)' – Thamaraiselvam

回答

2

你迭代$this->events(这可能是事件对象的数组),但检查可用性为$this,即当前对象。

如果$this->events是对象的数组,那么你应该这样做:

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

假设你的事件对象具有getAreEventsAvailable()方法。

如果$this->getAreEventsAvailable()回报您想要查找的事件,没有必要为foreach循环,只是把结果赋值给$availability

$availability = $this->getAreEventsAvailable(); 

编辑: 你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