我的php爆炸功能对“,”问题作出反应

时间:2016-06-01 07:24:22

标签: php explode fgetcsv

我有爆炸功能的一些问题。 我这样设置:

$p = explode(";", $data[$c]);

结束我在前18行收到的结果很好,然后我收到错误信息:
注意:未定义的偏移量:第18行的C:\ xampp \ htdocs \ slovenac \ zaloge \ parser.php中的6

第18行是这样的:

ean:4975769396717; AVTORADIO JVC KD-X50BTEY; 0; 0; 135; Softtrade d.o.o.,Gorèe20d; JVC; 0097;

并且我的爆炸在“Gorèe20d”之前对“。”作出反应。

我该如何解决这个问题?

    <?php
$row = 1;
if (($handle = fopen("csv/".$_GET['file_name'], "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
            $p = explode(";", $data[$c]);
            echo "<tr>";
            echo "<td>".$p[0]."</td>";
            echo "<td>".$p[1]."</td>";
            echo "<td>".$p[2]."</td>";
            echo "<td>".$p[3]."</td>";
            echo "<td>".$p[4]."</td>";
            echo "<td>".$p[5]."</td>";
            echo "<td>".$p[6]."</td>";
            echo "<td>".$p[7]."</td>";
            echo "<td>".$p[8]."</td>";
            echo "</tr>";
        }
    }
    fclose($handle);
}

这里是我的错误结果:

ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;117;Urbo PE Bre�ice;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;118;Tripex PE Celje;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;129;Setring PE Medvode;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;131;Dar PE Ptuj;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;133;ETS Pregl PE Slovenska Bistrica;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;134;Digital Elektronik PESolkan;JVC;0097;
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;135;Softtrade d.o.o.

    Notice: Undefined offset: 6 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 18

    Notice: Undefined offset: 7 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 19

    Notice: Undefined offset: 8 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 20
    Gor�e 20d;JVC;0097;

    Notice: Undefined offset: 4 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 16

2 个答案:

答案 0 :(得分:1)

<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8" /> </head> <body onLoad="populateList()"> <form> <select id="cars" multiple> <option id="carBrand"></option> </select> <button type="button" onclick="deleteFunc()">Delete</button> </form> <script> var sel = document.getElementById('cars'); var carArray= ["Audi", "BMW", "Porsche"] function populateList() { sel.innerHTML = ""; for (var i = 0; i < carArray.length; i++) { var listBox = document.createElement('option'); listBox.innerHTML = carArray[i]; listBox.value = carArray[i]; sel.appendChild(listBox); } } function deleteFunc() { var selInd = sel.selectedIndex; carArray.splice(selInd, 1); console.log(carArray); populateList(); } </script> </body> </html> 出现在代码的第18行,而不是数据文件中。这是因为Notice: Undefined offset未定义 - 这是因为CSV文件中的某些行只是没有足够的列/分号。

如果在$p[6]数组中设置了值,请在输出之前检查:

$p

如果您的文件中未设置值,则会输出 echo "<td>".(isset($p[0]) ? $p[0] : '-')."</td>"; echo "<td>".(isset($p[1]) ? $p[1] : '-')."</td>"; 。您也可以使用空字符串'-'

使用''循环使其更紧凑:

for

答案 1 :(得分:0)

根据你的代码你理所当然地认为csv文件的每一行至少有九个值,但你的例子的最后一行只有六个值。

尝试:

<?php
$row = 1;
if (($handle = fopen("csv/".$_GET['file_name'], "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
            $p = explode(";", $data[$c]);
            echo "<tr>";
            foreach($p as $value){
                echo "<td>".$value."</td>";
            }
            //if you want to always have nine columns
            for($i=9-count($p); $i > 0; $i--){
                echo "<td></td>";
            }
            echo "</tr>";
        }
    }
    fclose($handle);
}

这只是一个例子,代码可以改进