因foreach和for循环而产生多个输出

时间:2012-10-06 05:40:52

标签: php for-loop foreach

我正在阅读一堆excel文件并将其数据插入数据库中。查询都正常工作。唯一的问题是,如果作者出现在第一个excel文件中,其条目也会显示在其他excel文件中。这是我的代码。

$array = array(
1=>"abc",
2=>"def",
3=>"age");

foreach ($array as $key=>$val) {
    $file = $array[$key].'.xls';
    $data->read($file);
    $ID = $key;
    for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
        $a = addslashes($data->sheets[0]['cells'][$i][1]);
        if($a == "Ali")
        {
             echo $a."=>".$ID." ".$i."<br>";
        }
    }
}

所需的输出

abc.xls
Ali=>1 282
def.xls
age.xls

,输出结果是

abc.xls
Ali=>1 282
def.xls
Ali=>2 282
age.xls
Ali=>3 282

有人可以告诉我这段代码中的错误在哪里。任何帮助将是欣赏..

注意 Excel工作表中的行数为100。

3 个答案:

答案 0 :(得分:0)

在我看来,问题是该特定行的第1列总是"Ali"。这是猜测,因为你的输出是预期的,除了两个额外的Ali=>1 282。如果你能给我们前几行只是为了理解它会有所帮助。否则这似乎是个问题。

答案 1 :(得分:0)

我没有在foreach循环中包含这些行,因为$ data总是占用第一个excel文件。没有进一步的文件。这些行包含在foreach循环之前。

这些行是

$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('utf-8');

现在代码变为

foreach ($array as $key=>$val) {
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('utf-8');
    $file = $array[$key].'.xls';
    $data->read($file);
    $ID = $key;
    for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
       $a = addslashes($data->sheets[0]['cells'][$i][1]);
       if($a == "Ali")
       {
         echo $a."=>".$ID." ".$i."<br>";
       }
    }
}

答案 2 :(得分:0)

在每次循环迭代结束时,使用unset()取消设置(销毁)$a的当前值。 所需的变更如下:
更改以下内容:

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    $a = addslashes($data->sheets[0]['cells'][$i][1]);
    if($a == "Ali")
    {
      echo $a."=>".$ID." ".$i."<br>";
    }
}

到此:

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    $a = addslashes($data->sheets[0]['cells'][$i][1]);
    if($a == "Ali")
    {
      echo $a."=>".$ID." ".$i."<br>";
    }
    unset($a);
}