Pertanyaan CSV ke Array PHP


Saya tahu ada banyak sumber daya di luar sana untuk menempatkan CSV ke dalam array asosiatif, tetapi saya tidak dapat menemukan sesuatu yang membantu noob seperti saya melakukan apa yang ingin saya lakukan.

Saat ini saya memiliki array asosiatif yang didefinisikan di dalam file PHP saya:

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

Saya ingin memindahkan array tersebut ke dalam file CSV (users.txt) jadi:

 v4f25, Stan Parker
 ntl35, John Smith

Langkah selanjutnya adalah mengimpor users.txt sehingga saya bisa menggunakannya persis seperti saya menggunakan pengguna $ array.

Ada bantuan di sini? Kode terakhir yang saya coba kembalikan ini: (yang bukan yang saya inginkan)

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

5
2017-10-11 20:01


asal


Jawaban:


Bagaimana dengan yang berikut ini?

$data = array();

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

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

    fclose($fp);
}

5
2017-10-11 20:15



$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')
}

Lihat: fputcsv()

MEMPERBARUI - di komentar Anda tertarik pada cara membaca file dan membuat pengguna Anda mundur. Inilah perjalanan kembali:

$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');
}

3
2017-10-11 20:11



Berikut ini solusi yang digunakan fputcsv() yang mendatar pasangan kunci / nilai ke array sebelum menulis ke disk.

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

if ($filehandle) {
  foreach ($users as $key => $value) {
    fputcsv($filehandle, array($key, $value);
  }
  fclose($filehandle);
}
else // couldn't open file

2
2017-10-11 20:05



Coba ini (dengan asumsi string Anda tidak mengandung koma):

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

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

Tentunya Anda kemudian dapat membuat file CSV seperti:

php above_script.php > outfile.csv

Sekarang, untuk kembali dari CSV kembali ke array, Anda dapat menggunakan sesuatu seperti:

$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);

CATATAN:

  • Jika string Anda melakukan (atau mungkin) berisi koma, maka Anda mungkin ingin menggunakan fungsi builtin PHP untuk memecahkan kode mereka - dalam hal ini jawaban oleh harald dan artlung berguna.

  • RFC 4180 menjelaskan bagaimana koma (dan nilai lainnya) dikodekan dalam CSV, jika Anda ingin menggulung fungsi pengkodean / penguraian CSV Anda sendiri untuk alasan apa pun.


2
2017-10-11 20:03