Php while循环中的最后一次迭代

Php while循环中的最后一次迭代,php,while-loop,Php,While Loop,我试图获取数组中的最后一项,当迭代以输出与字符串不同的内容时 if (count($this->condition) > 1) { $i=0; while ($i < count($this->condition)){ if ($i == (count($this->condition) -1)) { foreach ($this->condition as $key =

我试图获取数组中的最后一项,当迭代以输出与字符串不同的内容时

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

        }
    }
if(计数($this->condition)>1){
$i=0;
而($icondition)){
如果($i==(计数($this->condition)-1)){
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value'];
}
}否则{
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value']”和“;
$i++;
}
}
}
}否则{
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value'];
}
}
但是,它不断添加AND,这意味着
$i==(count($this->condition))
永远不会为真


如何解决这个问题?

PHP中的数组是基于零的。如果
count()
返回
n
,则可以在
n-1
第th索引处访问数组中的最后一个元素

因此:

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++;
    }
}
while($icondition)){
如果($i==(计数($this->condition)-1)){
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value'];
}
}否则{
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value']”和“;
}
$i++;
}
}

PHP中的数组是基于零的。如果
count()
返回
n
,则可以在
n-1
第th索引处访问数组中的最后一个元素

因此:

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++;
    }
}
while($icondition)){
如果($i==(计数($this->condition)-1)){
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value'];
}
}否则{
foreach($此->条件为$key=>$value){
$query.=$value['columns']。“=”$value['value']”和“;
}
$i++;
}
}

简单的方法是:你的if应该是

 if ($i == count($this->condition)-1) {
因为数组是0索引的


不过,更简单的方法是,当您的代码在运行时,$i仍然会被设置。为什么不在while完成后阅读它,然后减去一个呢?

简单的方法是:你的if应该是

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

        }
    }
我已经修好了

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

        }
    }

到目前为止,更简单的方法是构建一个条件数组,然后在最后对它们进行内爆

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

到目前为止,更简单的方法是构建一个条件数组,然后在最后对它们进行内爆

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

听起来你最好使用
内爆()!你为什么一直数数?您应该将其放入一个var中,然后使用var来获取值。从它的外观来看,您只需要在返回的每个值之间插入“and”。因此,与其检查它是否是最后一个,不如做一些类似于
内爆('AND',$strings)
Hi Mike的事情,小问题是数组看起来像
array([0]=>array([0]array(['column']=['value']))
如果有意义的话?听起来你最好使用
内爆()
Hi Mike,在这种情况下,我将如何使用内爆-周六在PHP上玩一天可不是我喜欢的事!你为什么一直数数?您应该将其放入一个var中,然后使用var来获取值。从它的外观来看,您只需要在返回的每个值之间插入“and”。因此,与其检查它是否是最后一个,不如做一些类似于
内爆('AND',$strings)
嗨,迈克,小问题是数组看起来像
数组([0]=>数组([0]数组(['column']=['value']))
如果有意义的话?@Shamil:更新了我的帖子。试试看。如果将它放在if中,会杀死脚本,而将它放在外部,则会产生两个被再次迭代的数组。@Shamil:更新了我的帖子。尝试一下。将它放在if中会杀死脚本,而将它放在外部会生成两个数组,并再次进行迭代。