последняя итерация в цикле 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)) никогда не будет истинным.

Как это разрешить?

Совсем простой метод состоит в том, чтобы построить массив условий, а затем implode их в конце.

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

Массивы на PHP основаны на нуле. Если count() возвращает n , то последний элемент в вашем массиве можно получить в n-1 м индексе.

Следовательно:

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++; } } 

Простой способ: ваше, если должно быть

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

так как массивы 0-индексируются.

Тем не менее, даже более простой способ – по мере того, как ваш код заканчивается, $ i все равно будет установлен. Почему бы вам не прочитать его после того, как это сделано, и вычесть его?

Я исправил это.

  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']; } }