Я пытаюсь получить последний элемент в массиве, когда он повторяется для вывода чего-то другого в строку.
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']; } }