gpt4 book ai didi

PHP fgetcsv() 分隔符 ';' 无法识别

转载 作者:可可西里 更新时间:2023-10-31 22:40:58 25 4
gpt4 key购买 nike

看来我对“;”有疑问定界符。这是我的 csv 文件:

First Name;Last Name;Email;Age
Julie;Brown;julie@example.com;52
Dan;Wong;dan@example.com;19
Tim;Hortons;tim@example.com;27

和我的 PHP 代码:

$row = 1;
if (($handle = fopen("upload/".$_FILES['fichier']['name'], "r")) !== FALSE) {
while (($data = fgetcsv($handle, ";")) !== FALSE) {
$num = count($data);
echo "<p> $num champs à la ligne $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}

我有这个输出:

1 champs à la ligne 1: 
First Name;Last Name;Email;Age
1 champs à la ligne 2:
Julie;Brown;julie@example.com;52
1 champs à la ligne 3:
Dan;Wong;dan@example.com;19
1 champs à la ligne 4:
Tim;Hortons;tim@example.com;27

当我使用','分隔符时,而不是像这样

4 champs à la ligne 1: 
First Name
Last Name
Email
Age

此外,我想知道是否可以有各种分隔符。因为我想显示用户上传的 csv 文件,我不想强​​迫他们使用一个预定的分隔符。

谢谢

最佳答案

第二个参数是长度,所以你的fgetcsv应该是

fgetcsv($handle, 0, ';');

导致

4 champs à la ligne 1: 

First Name
Last Name
Email
Age
4 champs à la ligne 2:

Julie
Brown
julie@example.com
52
4 champs à la ligne 3:

Dan
Wong
dan@example.com
19
4 champs à la ligne 4:

Tim
Hortons
tim@example.com
27

关于你的第二个关于变量定界符的问题。到目前为止,最简单的方法是允许用户定义要在上传表单上使用的分隔符,可能使用可接受分隔符的选择元素,然后在读取 csv 时使用它。

例如

function filter_delimiter($v) {
return in_array($v, [',', ';'], true) ? $v : null;
}

//validate $_POST['delimiter'];
$delimiter = filter_input(INPUT_POST, 'delimiter', FILTER_CALLBACK, ['options' => 'filter_delimiter']);
if (!$delimiter) {
$delimiter = ';';
//optionally redirect to form error message
}

或者解析行以确定适当的分隔符。

$filename = "upload/".$_FILES['fichier']['name'];
if (($handle = fopen($filename, "r")) !== false) {
$content = fread($handle, filesize($filename));
fclose($handle);
//count the delimiters
$semiColons = substr_count($content, ';');
$commas = substr_count($content, ',');
//read each row
$rows = str_getcsv($content, "\n");
$rowCount = count($rows);
$delimiter = null;
foreach ($rows as $line => $row) {
//check the delimiters
if (false === isset($delimiter)) {
/*
determine if the delimiter total divided by the number
of rows matches the delimiters found on this row
and use it to parse the columns
*/
if ($semiColons > 0 && $semiColons / $rowCount === substr_count($row, ';')) {
$delimiter = ';';
} elseif ($commas > 0 && $commas / $rowCount === substr_count($row, ',')) {
$delimiter = ',';
}
}
//read the columns using the detected delimiter
//otherwise use a default if a delimiter could not be determined
$columns = str_getcsv($row, $delimiter ? : ';');
echo "<p>$rowCount champs à la ligne " . ($line + 1) . "</p>\n";
foreach ($columns as $column) {
echo $column . "<br/>\n";
}
}
}

关于PHP fgetcsv() 分隔符 ';' 无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37748133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com