CSV для массива PHP - PullRequest
       10

CSV для массива PHP

5 голосов
/ 12 октября 2011

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

Iв настоящее время в моем файле PHP определен ассоциативный массив:

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

Я бы хотел переместить этот массив в файл CSV (users.txt) так:

 v4f25, Stan Parker
 ntl35, John Smith

Следующий шагэто импортировать users.txt, чтобы я мог использовать его точно так же, как я использовал массив $ users.

Любая помощь здесь?Последний код, который я попробовал, вернул это: (это не то, что я хочу)

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

Ответы [ 4 ]

5 голосов
/ 12 октября 2011

А как насчет следующего?

$data = array();

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

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

    fclose($fp);
}
3 голосов
/ 12 октября 2011
$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');
}
2 голосов
/ 12 октября 2011

Вот решение, использующее 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
2 голосов
/ 12 октября 2011

Попробуйте это (если ваши строки не содержат запятых):

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

ПРИМЕЧАНИЯ:

  • Если ваши строки do (или могут ) содержат запятые, то вы, вероятно, захотите использовать встроенную функцию PHP для их декодирования - в этом случае ответы Харальд и Артлунг полезны.

  • RFC 4180 описывает, как запятые (и другие значения) кодируются в CSV, если вы хотите по какой-либо причине свернуть свои собственные функции кодирования / декодирования CSV.

...