Как удалить дубликаты из файла CSV с помощью PHP fgetcsv? - PullRequest
1 голос
/ 09 мая 2011

Я анализирую CSV-файл, используя fgetcsv, в частности, используя $ line_of_text. Я хочу повторить все города, в которых есть общая страна, но я хочу исключить дубликаты городов, чтобы, например, если бы Париж встречался 200 раз, он повторился бы только один раз, по одному эхо для других разных городов Франции, независимо от того, их количество экземпляров.

Я догадываюсь, что мне нужно сохранить значения городов в массиве, а затем использовать array_unique для удаления дубликатов, но, к сожалению, это выходит за рамки моих текущих возможностей php. Любая помощь высоко ценится, я попробовал все, что в моих силах!

<?php
  $display = 100;
  $counter = 1;
  $country = $_GET['country'];
  echo "<ol>";
  $file_handle = fopen("csv/file.csv", "r");
  while (($line_of_text = fgetcsv($file_handle, 1024, ",")) !== false) {
      if ($line_of_text[13] == $country) {
          echo "<li>City:" . $line_of_text[15]) . "</li>";

          $counter++;
          if ($counter == $display) {
              break;
              echo "</ol>";
          }
      }
  }
  fclose($file_handle);
?>

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Вы можете немного упростить свой код:

// read in file
$csv = array_map("str_getcsv", file("csv/file.csv"));
$cities = array();

// loop for countries
foreach ($csv as $line) {
    if ($line[13] == $country) {
        $cities[] = $line[15];    // append to new array
    }
}

// unique cities
$cities = array_unique($cities);
$cities = array_slice($cities, 0, 100);   // max 100

// output
foreach ($cities as $name) { print "<li>City: $name</li>"; }

Вы должны попытаться разделить логику обработки и вывод следующим образом.

1 голос
/ 09 мая 2011

Просто работает из памяти, попробуйте что-то вроде

<?php
  $display = 100;
  $counter = 1;
  $country = $_GET['country'];
  $storedcountries = array();//Store countries that have already been read
  echo "<ol>";
  $file_handle = fopen("csv/file.csv", "r");
  while (($line_of_text = fgetcsv($file_handle, 1024, ",")) !== false) {
      if ($line_of_text[13] == $country && !in_array($storedcountries, $line_of_text[13]) {//Make sure the country is not already stored in the $storedcountries array
          echo "<li>City:" . $line_of_text[15]) . "</li>";

          $counter++;
          if ($counter == $display) {
              break;
              echo "</ol>";
          }
          $storedcountries[] = $line_of_text[15];
      }
  }
  fclose($file_handle);
?>
...