0

文字列とは異なるものを出力するために反復されているときに、配列の最後の項目を取得しようとしています。

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))決して真ではありません。

これを解決するにはどうすればよいですか?

4

4 に答える 4

4

はるかに簡単な方法は、条件の配列を作成implodeし、最後にそれらを作成することです。

$conditions = array();
foreach($this->condition as $key => $value) {
   $conditions[] = $values['columns'] . ' = ' . $value['value'];
}
$query = implode(' and ', $conditions);
于 2012-11-18T03:42:29.200 に答える
1

PHP の配列はゼロベースです。count()が返された場合、配列の最後の要素にth インデックス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++;
    }
}
于 2012-11-18T00:54:30.647 に答える
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'];

        }
    }
于 2012-11-18T01:49:56.277 に答える
0

簡単な方法:あなたのifは

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

配列のインデックスは 0 です。

ただし、さらに簡単な方法は、コードが時間切れになっても $i が設定されたままになることです。しばらくしてから読んで、1つ引いてみませんか?

于 2012-11-18T00:55:30.533 に答える