我有爆炸功能的一些问题。 我这样设置:
$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
答案 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);
}
这只是一个例子,代码可以改进