5

CSVを連想配列に入れるためのリソースがたくさんあることは知っていますが、私のような初心者がやりたいことを正確に行うのに役立つものは何も見つかりません.

現在、PHP ファイル内に連想配列が定義されています。

$users = array(
    'v4f25' => 'Stan Parker', 
    'ntl35' => 'John Smith',
 );

その配列を CSV ファイル (users.txt) に移動したいので、次のようにします。

 v4f25, Stan Parker
 ntl35, John Smith

次のステップは、配列 $users を使用していたのとまったく同じように使用できるように、users.txt をインポートすることです。

ここで何か助けはありますか?私が試した最後のコードはこれを返しました:(これは私が望むものではありません)

 array(2) {
 ["v4f25"]=>
  string(5) "ntl35"
 ["Stan Parker"]=>
 string(10) "John Smith"
}
4

4 に答える 4

5

以下はどうですか?

$data = array();

if ($fp = fopen('csvfile.csv', 'r')) {
    while (!feof($fp)) {
        $row = fgetcsv($fp);

        $data[$row[0]] = $row[1];
    }

    fclose($fp);
}
于 2011-10-11T20:15:50.740 に答える
3
$users = array(
    'v4f25' => 'Stan Parker',
    'ntl35' => 'John Smith',
 );

$fp = fopen('users.txt', 'w');
if ($fp) {
   foreach ($users as $key => $value) {
       fputcsv($fp, array($key, $value));
   }
   fclose($fp);
} else {
   exit('Could not open CSV file')
}

見る:fputcsv()

更新- ファイルを読んでユーザーを元に戻す方法に興味があるコメントで。帰りの行程は次のとおりです。

$users = array();
if (($handle = fopen("my-csv-file.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $users[$data[0]] = $data[1];
    }
    fclose($handle);
} else {
    exit('Could not open CSV file');
}
if (count($users) == 0) {
    exit('CSV file empty: no users found');
}
于 2011-10-11T20:11:15.793 に答える
2

fputcsv()これは、ディスクに書き込む前にキーと値のペアを配列にフラット化するソリューションです。

$filehandle = fopen("csvfile.csv", "w");

if ($filehandle) {
  foreach ($users as $key => $value) {
    fputcsv($filehandle, array($key, $value);
  }
  fclose($filehandle);
}
else // couldn't open file
于 2011-10-11T20:05:38.117 に答える
2

これを試してください(文字列にコンマが含まれていないと仮定します):

$users = array(
    'v4f25' => 'Stan Parker',
    'ntl35' => 'John Smith',
 );

foreach ($users as $k => $v) {
    print "$k, $v\n";
}

明らかに、次のように CSV ファイルを作成できます。

php above_script.php > outfile.csv

ここで、CSV から配列に戻すには、次のようなものを使用できます。

$file = 'outfile.csv';

$arr = array();
if (file_exists($file)) {
    foreach (explode("\n", file_get_contents($file)) as $l) {
       list($k, $v) = explode(',', $l);
       $arr[trim($k)] = trim($l);
    }
}

print_r($arr, true);

ノート:

  • 文字列にコンマが含まれている(または含まれている可能性がある) 場合は、PHP 組み込み関数を使用してそれらをデコードすることをお勧めします。その場合、harald と artlung による回答が役に立ちます。

  • RFC 4180では、何らかの理由で独自の CSV エンコーディング/デコーディング関数を展開する場合に備えて、CSV でコンマ (およびその他の値) をエンコードする方法について説明しています。

于 2011-10-11T20:03:51.937 に答える