我对此代码有疑问,问题是内部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);
}
答案 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
}
}
}