l'ultima iterazione in un ciclo while

Sto cercando di get l'ultimo elemento in un arrays, quando viene iterato per produrre qualcosa di diverso da una string.

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

Tuttavia, continua ad aggiungere l'AND, il che significa che $i == (count($this->condition)) non è mai vero.

Come posso risolvere questo?

Di gran lunga più semplice metodo è quello di build una serie di condizioni, quindi implode alla fine.

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

Le matrici in PHP sono a base zero. Se count() restituisce n , è ansible accedere all'ultimo elemento dell'arrays al n-1 ° indice.

Quindi:

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

dovrebbe essere

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

Inoltre, stai incrementando $i troppo spesso. $i++ dovrebbe essere spostato all'esterno del ciclo foreach . Dovrebbe essere così:

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

Il modo semplice: il tuo se dovrebbe essere

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

come matrici sono 0-indexed.

Il modo ancora più semplice, però – dato che il tuo codice scade nel tempo, $ resterò comunque impostato. Perché non lo leggi dopo che è finito e ne sottrai uno?

L'ho risolto

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