0

我正在阅读一堆 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。

4

3 回答 3

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);
}
于 2012-10-06T08:34:31.410 回答
0

在我看来,问题在于该特定行的第 1 列始终是什么"Ali"。这是一个猜测,因为除了两个 extra 之外,您的输出与预期的一样Ali=>1 282。如果你能给我们前几行只是为了理解会有所帮助。否则,这似乎真的是问题所在。

于 2012-10-06T06:34:30.583 回答
0

我没有在foreachloop 中包含这一行,因为 $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>";
       }
    }
}
于 2012-10-06T06:53:58.003 回答