2016-08-12 87 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