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