循环中的PHP-Array返回空
我试图通过CSV上传将数据添加到两个不同的MySql表中。我已经能够检索信息并将部分信息上载到一个表中,但在将数据发送到第二个表时遇到问题。我想出了以下代码:循环中的PHP-Array返回空,php,arrays,csv,Php,Arrays,Csv,我试图通过CSV上传将数据添加到两个不同的MySql表中。我已经能够检索信息并将部分信息上载到一个表中,但在将数据发送到第二个表时遇到问题。我想出了以下代码: $i = 0; //Loop through the csv file do { if ($data[0]) { //Store request information //Info for Request Table $requester_email = $data[0];
$i = 0;
//Loop through the csv file
do {
if ($data[0]) {
//Store request information
//Info for Request Table
$requester_email = $data[0];
$requester_name = $data[1];
$client_name = $data[2];
$client_country = $data[3];
$opportunity_number = $data[4];
$machine_quantity = $data[5];
$severity = $data[6];
//Store machine values
//Info for Serial Numbers Table
$serialType = array();
$serialModel = array();
$serialType[$i] = $data[7];
$serialModel[$i] = $data[8];
}
$i++;
} while ($data = fgetcsv($handle,1000,",","'"));
我对数组有问题。我只能存储csv文件最后一行的serialType和serialModel。例如,如果csv文件有3行数据:
(
[0]=>空
[1] =>空的
[2] =>最后一个值正常
)
为什么我无法存储其他两个值?请移动
$serialType = array();
$serialModel = array();
在脚本中执行之前。当它仍然在do循环中时,它只是do-While
中的一个初始化变量,用于确定每个迭代的范围并清理它
$i = 0;
$serialType = array();
$serialModel = array();
while ($data = fgetcsv($handle,1000,",","'")) {
...
$serialType[$i] = $data[7];
$serialModel[$i] = $data[8];
$i++;
};
谢谢@misterion,你说得对!关于这个主题还有一个疑问,[0]=>为什么仍然是空的?所有值都从[1]开始存储。。为什么?看起来你的csv文件第一行可能是空的,也可能不包含7,8列。只需试着调试它,并在循环中添加var_dump($data),然后查看第一行输出。实际上,PHP函数中定义的变量不考虑控制结构及其关联块的块范围,并且在其定义块完成后仍然可以访问该函数。是的,正如Aluan所说,PHP中没有任何类似的块作用域。真正的答案是数组是在循环中初始化的,循环在每次迭代中都会擦除它们的内容。