我编写了下面的代码,将.csv文件中的全名分成名字,中间名和姓氏。它运作良好,并提供以下类型的输出:
Eric,T.,Nolan
Mary,,Worth
Jim,T.,Lane
E.,Thomas,Powell
William,Reilly,Smith
Johnny,,Depp
Stevie,de,la Soul
我可以将它打印到屏幕上,但需要帮助将其放回一个新的.csv文件中,其中三个字段用逗号分隔(即firstname,middlename,lastname)。不确定我是否应该使用fwrite或fputcsv。我花了很长时间才分割名称,现在我不得不把它写回新的csv文件。我很感激大师的一些帮助。谢谢大家!
这是我的代码:
<?php
$file = fopen('nameFile.csv', 'r');
$row = 0;
while (($line = fgetcsv($file)) !== FALSE)
{
list($name[]) = $line;
$row++;
}
$number_of_rows = $row;
fclose($file);
for($i = 0; $i < $number_of_rows; $i++) {
foreach ($name as $NameSplit)
list($first[], $middle[], $last[]) = explode(' ', $NameSplit, 3);
if ( !$last[$i] ) {
$last[$i] = $middle[$i];
unset($middle[$i]);
}
echo $first[$i] . "," . $middle[$i] . "," . $last[$i] . "<br>\n";
}
?>
答案 0 :(得分:1)
冒着用勺子喂你的风险,我决定重做它。您的代码显示了新程序员的标志(没有冒犯)。
将我的代码与您自己的代码进行比较。您错误地使用list
,不必要地循环,递增不必要的计数器;举几个问题。
请注意,这取决于输入文件不是实际的CSV文件,而只是每行一个名称的文件。在得出这个结论时,我可能误解了你的代码。
$file = fopen('nameFile.csv', 'r');
while (($line = fgets($file)) !== FALSE)
{
$names_array[] = trim($line); // trim whitespace at the begining and end of each line, in this case the EOL character(s)
}
fclose($file);
$output_file = fopen('/var/tmp/output.csv', 'w'); // this will clobber the file output.csv use 'a' instead of 'w' if you want to add to an existing file
foreach ($names_array as $name)
{
$processed_name = explode(' ', $name, 3); // split the name, based on spaces
// not all full names contain a middle name
if (!isset($processed_name[2]))
{
$processed_name[2] = $processed_name[1];
$processed_name[1] = null;
}
// output each line into a CSV file
fputcsv($output_file, $processed_name);
}
fclose($output_file);
答案 1 :(得分:0)