2012-11-18 91 views
0

我試圖獲得數組中的最後一項,當迭代時輸出不同的字符串。在while循環中的最後一次迭代

if (count($this->condition) > 1) { 
     $i=0; 
     while ($i < count($this->condition)){ 
      if ($i == (count($this->condition) -1)) { 

       foreach ($this->condition as $key => $value){ 

        $query .= $value['columns']." = ".$value['value']; 
       } 
      } else { 
       foreach ($this->condition as $key => $value){ 

        $query .= $value['columns']." = ".$value['value']." AND "; 
        $i++; 

       } 
      } 
     } 
    } else { 
     foreach ($this->condition as $key => $value){ 
      $query .= $value['columns']." = ".$value['value']; 

     } 
    } 

但是,它不斷添加AND,這意味着$i == (count($this->condition))永遠不會是真的。

我該如何解決這個問題?

+0

聽起來像是你會過得更好使用'破滅()' – Mike

+0

嗨@Mike,我怎麼會用在這種情況下破滅 - 對PHP每天在一個星期六是不是我的那杯茶! – bear

+0

你爲什麼繼續計數?你應該把它放到一個var中,然後使用var來獲得值。 – frustratedtech

回答

0

我修復了它。

if (count($this->condition) > 1) { 
      $i=0; 
      foreach ($this->condition as $key => $value){ 

       if ($i == ($conditionCount -1)) { 
        $query .= $value['columns']." = ".$value['value']; 
       } else { 
        $query .= $value['columns']." = ".$value['value']." AND "; 
       } 
      $i++; 
      } 
    } else { 
     foreach ($this->condition as $key => $value){ 
      $query .= $value['columns']." = ".$value['value']; 

     } 
    } 
2

PHP中的數組基於零。如果count()返回n,則數組中的最後一個元素可以在n-1 th索引處訪問。

因此:

if ($i == (count($this->condition)))

應該

if ($i == (count($this->condition) - 1))

而且,你遞增$i過於頻繁。 $i++應該移到foreach循環之外。它應該是這樣的:

while ($i < count($this->condition)) { 
    if ($i == (count($this->condition) -1)) { 
     foreach ($this->condition as $key => $value){ 
      $query .= $value['columns']." = ".$value['value']; 
     } 
    } else { 
     foreach ($this->condition as $key => $value){ 
      $query .= $value['columns']." = ".$value['value']." AND "; 
     } 

     $i++; 
    } 
} 
+0

代碼更新後仍然有更多重複,仍然不行爲 – bear

+0

@Shamil:更新了我的帖子。試試看。 –

+0

讓它在內部如果殺死腳本,而在外部產生兩個數組再次被迭代。 – bear

0

最簡單的方法:你是否應該

if ($i == count($this->condition)-1) { 

爲陣列0索引。

儘管更簡單的方法 - 因爲你的代碼耗盡了,$ i仍然會被設置。爲什麼不在一段時間後讀取它,並減去一個?

+0

代碼已更新,仍不起作用 – bear

3

更簡單的方法是建立一個條件數組,然後implode他們在最後。

$conditions = array(); 
foreach($this->condition as $key => $value) { 
    $conditions[] = $values['columns'] . ' = ' . $value['value']; 
} 
$query = implode(' and ', $conditions); 
相關問題