Помогите разобрать имя в PHP и записать обратно в файл .CSV - PullRequest
2 голосов
/ 18 июля 2010

Я написал код ниже, чтобы разделить полное имя из файла .csv на имя, отчество и фамилию.Он работает хорошо и дает следующий вид вывода:

Eric,T.,Nolan
Mary,,Worth
Jim,T.,Lane
E.,Thomas,Powell
William,Reilly,Smith
Johnny,,Depp
Stevie,de,la Soul 

Я могу получить его для печати на экране, но мне нужна помощь, чтобы вернуть его в новый файл .csv с тремя полями, разделенными запятыми (т.е., Имя Второе Имя Фамилия).Не уверен, стоит ли мне использовать 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";  
  }

?>

Ответы [ 2 ]

1 голос
/ 18 июля 2010

Риск кормить тебя ложкой, я решил все переделать.Ваш код показывает отличительные признаки нового программиста (без обид).

Сравните мой код с вашим собственным.Вы использовали 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);
0 голосов
/ 18 июля 2010

Последний не выглядит правильно."Stevie de la Soul", фамилия должна быть "de la Soul", а второе имя должно быть пустым.Кроме того, во многих культурах люди не имеют фамилий.

В любом случае, чтобы записать CSV в файл, просто используйте функцию fputcsv () .На странице руководства он указан как "See alse" для fgetcsv () .

...