5

我知道有很多资源可以将 CSV 放入关联数组,但我找不到任何可以帮助像我这样的菜鸟做我想做的事情的东西。

我目前在我的 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

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

试试这个(假设你的字符串不包含逗号):

$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 回答
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 回答