在内部时只运行一次

时间:2016-01-29 14:22:38

标签: php while-loop

我对此代码有疑问,问题是内部while只运行一次而外部while执行正确。可能是什么问题?

注意:$producto_id是一个带有ID的数组。

$st_column = 0;
$nd_column = 1;
$posicionArray = 0;

if (($handle = fopen($ruta, "r")) != FALSE) {
    fgetcsv($handle);
    mysqli_query($link, "BEGIN");
    while($producto_id[$posicionArray]){                        
        $ins_producto = mysqli_query ($link, "INSERT INTO productos (encuesta_id, producto_id, nom_producto) VALUES ('".$encuesta_id."', '".$producto_id[$posicionArray]."', '".$nombre_producto[$posicionArray]."')");

        while (($data = fgetcsv($handle, 0, "$delimiter")) != FALSE) {                      
            if($producto_id[$posicionArray] == $data[$st_column]){                              
                $ins_cupon = mysqli_query ($link, "INSERT INTO cupones (encuesta_id, producto_id, cupon, estado) VALUES ('".$encuesta_id."', '".$producto_id[$posicionArray]."', '".$data[$nd_column]."', 0)");                 
            }                                                   
        }
        $posicionArray ++;
    }

    fclose($handle);                
}

2 个答案:

答案 0 :(得分:0)

这完全取决于你的意思:

($ data = fgetcsv($ handle,0," $ delimiter")

如果你的意思是: ($ data == fgetcsv($ handle,0," $ delimiter")) 这就是数据的值等于fgetcsv的结果     那你的代码是错的。并切换到" =="

如果你的意思是: ($ data = fgetcsv($ handle,0," $ delimiter")) 和fgetcsv可以返回" 0"那就是原因。

使用"作业"在if语句中间总是不好的做法。

如果在if语句的中间执行赋值,则赋值的值将传递给布尔表达式。除0以外的任何值都被视为真。否则0被认为是假的。

答案 1 :(得分:0)

我相信你有一个csv,它拥有ID和优惠券。您似乎正在尝试浏览producto_id数组并检查CSV中是否存在该数组。这就是我要做的事情:

<强> CSV:

id,cupon
1,15165165
1,16516151
2,16841684

<强> PHP:

function turn_csv_to_array($csv) {
    $result = array();
    if (($h = fopen($csv, "r")) != FALSE) {
        $header = fgetcsv($h);
        while ($row = fgetcsv($h)) {
            $result[] = array_combine($header, $row);
        }
        fclose($h);
    }
    return $result;
}

$coupons = turn_csv_to_array("test.csv");
$product_ids = [1, 2, 3, 4];


foreach ($product_ids as $pid) {
    // INSERT PRODUCT TO PRODUCT_DB
    foreach ($coupons as $c) {
        if ($pid == $c['id']) {
            // INSERT PRODUCT TO COUPONS_DB
        }
    }
}