我对这段代码有问题,问题是内部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);
}
我相信
你有一个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
}
}
}
这完全取决于您的意思:
($data = fgetcsv($handle, 0, "$delimiter")
如果您的意思是:($data == fgetcsv($handle, 0, "$delimiter"))也就是说,数据的价值等于 FGETCSV 的结果 那么你的代码是错误的。并切换到"=="
如果您的意思是:($data = fgetcsv($handle, 0, "$delimiter"))fgetcsv 可以返回"0",这就是原因。
在 if 语句中间使用"赋值"始终是一种不好的做法。
如果在 if 语句中间执行赋值,则赋值的值将传递给布尔表达式。 除 0 以外的任何值都被视为 true。 否则,0 被视为假。