여기에 data.csv가 있습니다.
id: 10, location: Canada, people: 12
id: 10, location: United States, people: 15
id: 15, location: England, people: 19
id: 16, location: India, people: 20
id: 16, location: Germany, people: 9
PHP를 사용하여 출력하고 싶습니다.
id: 10, location: Canada, people: 12
id: 15, location: England, people: 19
id: 16, location: India, people: 20
첫 번째 열에서 동일한 값을 가진 행을 삭제합니다. 어떻게 할 수 있습니까? (저는 PHP를 처음 접했고 여기서 무엇을 해야할지 모르겠습니다. 다른 사람들이 비슷한 문제에 대해 만든 일부 스크립트를 시도했지만 작동하지 않는 것 같습니다.) 덮어 쓰는 대신 결과를 반향하는 것이 바람직합니다. 또는 새 파일 만들기.
fgetcsv를 사용하여 csv를 한 줄씩 읽고 ':'뒤에있는 것이 키이고 뒤에있는 것이 값인 배열을 만듭니다.
그런 다음 중복을 제거 할 수 있습니다.
데이터 만 있으면 csv 문자열을 구성해야합니다. 그냥 사용하거나 출력 csv 파일에 저장할 수 있습니다.
<?php
$handle = fopen("data.csv", "r");
// parse csv line by line and create data array with its information
$data = [];
while (($row = fgetcsv($handle)) !== false) {
$newRow = [];
foreach ($row as $field) {
$parts = explode(':', $field);
$key = trim($parts[0]);
$value = trim($parts[1]);
$newRow[$key] = $value;
}
$data[] = $newRow;
}
// iterate data and remove duplicate ids - keep only first id occurence
$indexedData = [];
foreach ($data as $row) {
if (!isset($indexedData[$row['id']])) {
$indexedData[$row['id']] = $row;
}
}
var_dump($indexedData);
// create csv string with new data
$result = '';
foreach ($indexedData as $row) {
$fields = [];
foreach ($row as $key => $value) {
$fields[] = $key.': '.$value;
}
$result .= implode(', ', $fields).PHP_EOL;
}
var_dump($result);
$ indexedData :
array(3) {
[10]=>
array(3) {
["id"]=>
string(2) "10"
["location"]=>
string(6) "Canada"
["people"]=>
string(2) "12"
}
[15]=>
array(3) {
["id"]=>
string(2) "15"
["location"]=>
string(7) "England"
["people"]=>
string(2) "19"
}
[16]=>
array(3) {
["id"]=>
string(2) "16"
["location"]=>
string(5) "India"
["people"]=>
string(2) "20"
}
}
$ result :
string(111) "id: 10, location: Canada, people: 12
id: 15, location: England, people: 19
id: 16, location: India, people: 20
"
또는 csv의 데이터에 신경 쓰지 않는다면 (예를 들어 인원 수 등이 필요하지 않음) 여기에 더 간단한 버전이 있습니다.
<?php
$handle = fopen("data.csv", "r");
$data = [];
while (($row = fgetcsv($handle)) !== false) {
if (!isset($data[$row[0]])) {
$data[$row[0]] = $row;
}
}
$result = '';
foreach ($data as $row) {
$result .= implode(',', $row).PHP_EOL;
}
var_dump($result);
$ result는 동일합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다