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

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>";
       }
    }
}
于 2012-10-06T06:53:58.003 に答える
0

問題は、その特定の行の列1が常にあるものであるように私には思えます"Ali"。ただし、2つの余分なを除いて、出力は期待どおりであるため、これは推測ですAli=>1 282。理解するために最初の数行を教えていただければ助かります。そうでなければ、これは本当に問題のようです。

于 2012-10-06T06:34:30.583 に答える
0

unset()を使用$aして、各ループ反復の終了時の現在の値をunset(destroy)します。必要な変更は次のとおりです。以下を
変更します。

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 に答える