如何使用php知道我们在循环中的位置


how to know where we are in a loop using php

我在循环中遇到了一些麻烦,因为我做了一些xml文件以进行撤回我必须为每条记录指定一个值(sepa)必须调用第一条记录并将其设置为"first",nexts必须被调用并设置为RECURRENT,最后一个必须调用并设置"FINAL"

为此,我做了一个循环,将要设置到xml文件中的reord插入到我的数据库中。

对于第一次,我没有问题,对于复发,我也没有问题,但我不知道如何知道记录何时是我循环的最后一次,所以我可以设置"最终"

下面是我的代码

 $i=0;
    while ($prlvt = mysql_fetch_assoc($result5)):
    if($i==0){
        $statement = 'FIRST';
    }elseif($i>0){
        $statement = 'RECURRENT';
    }
    $prlvt_rqt = "INSERT INTO `prelevements` SET
`prelevements__n_doss` = '{$_GET['n_doss']}', 
`prelevements__statut` = 0, 
`prelevements__date_record` = '{$prlvt['date_action']}', 
`prelevements__montant` = '{$prlvt['description']}',
`prelevements__statement` = '{$statement}'
";
    mysql_query($prlvt_rqt);
    $i++;
    endwhile;

问题是我不知道如何设置我的"最终"声明。

任何形式的帮助都将不胜感激。

请参阅mysql_num_rows:的文档

if($i==0){
    $statement = 'FIRST';
}elseif($i == mysql_num_rows($result5) - 1){
    $statement = 'FINAL';
}else{
    $statement = 'RECURENT';
}

考虑切换到mysqli_*,从PHP 5.5.0开始,mysql_*将被弃用。

在您的情况下,最好使用mysql_num_rows。但在无法添加if的情况下,您可以选择:

while(/*..*/){
}
mysql_query('UPDATE prelevements SET statmet = "FINAL" WHERE id = '.mysql_insert_id();

但是

  • 将答案与mysql_num_rows一起使用
  • 使用PDOMysqli而不是Mysql

您可以获得项目总数mysql_num_rows()

$i=0;
$tot = mysql_num_rows($result5);
while ($prlvt = mysql_fetch_assoc($result5)):
if ($i==0) $statement = 'FIRST';
elseif($i == ($tot-1)) $statement = 'LAST';
else $statment = 'RECURRENT';
// rest of your code
$i++;
endwhile;

除此之外,我强烈建议您将方法切换到PDO,因为旧语句现在已经过时,并且可能存在漏洞

$i=0;
while ($prlvt = mysql_fetch_assoc($result5)):
if($i==0){
    $statement = 'FIRST';
}elseif($i == mysql_num_rows($result5)){
$statement = 'FINAL';
 }elseif($i>0){
    $statement = 'RECURRENT';
}
$prlvt_rqt = "INSERT INTO `prelevements` SET
`prelevements__n_doss` = '{$_GET['n_doss']}', 
`prelevements__statut` = 0,
`prelevements__date_record` = '{$prlvt['date_action']}',
`prelevements__montant` = '{$prlvt['description']}',

`prelevements__statement` = '{$statement}'
";

 mysql_query($prlvt_rqt);
$i++;
endwhile;

这是完整的解决方案。