-1

私はウェブを検索し、既存の回答を調べましたが、これに対する解決策が見つかりません。php を使用して次のタスクを実行したいと考えています。ここに私のファイルがあります:

csv ファイル 1: member.csv

member1|john|smith|2009
member2|adam|jones|2007
member3|susie|rose|2002

csv ファイル 2: classes.csv

member1|massage|swimming|weights
member2|gym|track|pilates
member3|yoga|running|stretches

メンバー番号であるキー フィールドに基づいて、上記の 2 つのファイルをマージする file3.csv という 3 番目のファイルを出力したいと考えています。出力は次のようになります。

member1|john|smith|2009|massage|swimming|weights         
member2|adam|jones|2007|gym|track|pilates    
member3|susie|rose|2002|yoga|running|stretches

区切り文字はバー文字です。私はphpだけを使ってこれをやりたいです - 他の言語はありません。

私は解決策に非常に感謝しています。

マット

4

3 に答える 3

1
  1. 両方のファイルを読み取り、次のキーを使用して配列にデータを格納します: member1, ...

  2. ループで新しいファイル行を書き込みます。

foreach ($firstArray as $key => $value1) {
    $value2 = $secondArray[$key];

    // ...
}
于 2012-10-05T17:11:09.177 に答える
0
<?php
$data = array();
if (($handle = fopen('file1.csv', 'r')) !== FALSE) {
    while (($line = fgetcsv($handle, 0, '|')) !== FALSE) {
        $memberId = $line[0];
        unset($line[0]);
        $data[$memberId] = $line;
    }
    fclose($handle);
}
if (($handle = fopen('file2.csv', 'r')) !== FALSE) {
    while (($line = fgetcsv($handle, 0, '|')) !== FALSE) {
        $memberId = $line[0];
        unset($line[0]);
        $data[$memberId] = array_merge($data[$memberId], $line);
    }
    fclose($handle);
}
ksort($data);       // not needed, but puts records in order by member
if (($handle = fopen('file3.csv', 'w')) !== FALSE) {
    foreach($data as $key => $value) {
        fwrite($handle, "$key|" . implode('|', $value) . "\n");
    }
    fclose($handle);
}
于 2012-10-05T17:19:38.797 に答える
0

これを試して。それはテストされていません。

$arr_one = array();
if (($fp = fopen("member.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
    $arr_one[$data[0]] = $data;
  }
  fclose($fp);
}
$arr_two = array();
if (($fp = fopen("classes.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
    $arr_two[$data[0]] = $data;
  }
  fclose($fp);
}
$classes_field_count = sizeof(current($arr_two));
$members = array_keys($arr_one);
foreach ($members as $key) {
  if (!isset($arr_two[$key])) {
    $arr_two[$key] = range(0, ($classes_field_count - 1));
  }
  unset($arr_two[$key][0]);
  $result_arr[$key] = array_merge($arr_one[$key], $arr_two[$key]);      
}
if (($fp = fopen("file3.csv", "w")) !== FALSE) {
  foreach ($result_arr as $fields) {
    fputcsv($fp, $fields, '|');
  }
  fclose($fp);
}
于 2012-10-05T17:54:54.000 に答える