循环中的PHP-Array返回空

循环中的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];

我试图通过CSV上传将数据添加到两个不同的MySql表中。我已经能够检索信息并将部分信息上载到一个表中,但在将数据发送到第二个表时遇到问题。我想出了以下代码:

$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中没有任何类似的块作用域。真正的答案是数组是在循环中初始化的,循环在每次迭代中都会擦除它们的内容。