質問
こんにちはすべて、PHPコードを介してCSVオープニングに問題があります。私のPHPコードは次のとおりです。
<?php
header("Content-Type: text/html; charset=windows-1251");
echo "<html>
<head>
<title></title>
</head>
<body>
";
$file = "import.csv";
if(file_exists($file)) {
if (($fopen = fopen($file, "r")) !== FALSE) {
echo "<table>\n";
while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
$max = count($data);
$num++;
echo "<tr>\n<td>".$num."</td>\n";
for ($i=0;$i<$max;$i++) {
echo "<td>".$data[$i]."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
fclose($fopen);
}
}
else {
echo "File doesn't exists!";
}
echo "
</body>
</html>";
?>
問題はPHPコードではなく、問題は.CSVファイルにあります。 PHPコードは、情報に通常の方法を表示する場合、コンマが欠落している場合でも機能する必要があります。
.csvファイル:
First name,Family,Sex,Date of birth,City,Phone number
One, Ofamily, Male, 1975, LA,13-25-16
Two, Tfamily, Male, 1955, LV, 555-14345
Three, Thfamily, Male, 1958, NY, 15689
Four, Ffamily, Female, 1974, SF, 5897912
Five, Fifamily, Male, 1991, LA, 123456789
Six, Sfamily, Male, 1967, 9876542
Seven, Sefamily, Female,, SF,
解決
<?php
header("Content-Type: text/html; charset=windows-1251");
echo "<html>
<head>
<title></title>
</head>
<body>
";
$file = "import.csv";
if(file_exists($file)) {
if (($fopen = fopen($file, "r")) !== FALSE) {
echo "<table>\n";
while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
$num++;
echo "<tr>\n<td>".$num."</td>\n";
foreach($data as $k => $v) {
switch ($k) {
case 0 : // first name
case 1 : // family
case 2 : // sex
case 4 : // city
if (is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
case 3 : // date of birth
case 5 : // phone number
if (!is_numeric($v)) {
array_splice($data,$k,0,'');
}
break;
}
}
foreach($data as $v) {
echo "<td>".$v."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
fclose($fopen);
}
}
else {
echo "File doesn't exists!";
}
echo "
</body>
</html>";
?>
他のヒント
着信CSVを制御できない場合、使用することはできません fgetcsv
. 。行方不明があるかどうかはどのように知ることになっていますか ,
?
残念ながら、これを処理するために独自の機能を作成する必要があります。各行を配列に読み込むことから始めます。次に、ラインをループします explode
コンマでそれらを届けます。次に、各値を確認し、結果の配列から不足しているかどうかを判断する必要があります。
あなたの例の問題のある行を見てみましょう。
Six, Sfamily, Male, 1967, 9876542
これが私たちがそれについて知っていることです:
- 残りのすべてよりも1つの値が含まれているため、データの一貫性チェックを実行する必要があります。
- 私たちは、最初と2番目の値が文字列になることを知っています しない 等しい「男性」または「女性」。
- 3番目の値は、常に「男性」または「女性」のいずれかに等しくなければならないことを知っています。
- 4番目の値は1年であり、常に数値であるべきです。
- 5番目の値が欠落しており、都市コードである必要があり、常に2文字の長さになります。
その情報に基づいて、それらの値のいずれかが期待するものに等しくないかどうかを判断して、それを修正するためにいくつかのチェックを書くことができるはずです。
問題は、次のような行で最も可能性が高いです。
Six, Sfamily, Male, 1967, 9876542
都市情報がない場合。この場合、これが都市ではないことを決定し、次の列にスキップするためにロジックを適用しない限り、電話列に「9876542」を表示することはありません。ただし、各行に6つの列があるようにすることは、毎回$ MAXをリセットする代わりに、ヘッダーを読んだ後に一度設定する必要があることです。次に、読んだ各行からその数の列を表示します。
所属していません StackOverflow