【问题标题】:PHP CSV from Associative Array来自关联数组的 PHP CSV
【发布时间】:2017-11-19 14:39:53
【问题描述】:

我遇到的问题是使用 PHP 从关联数组创建 CSV 文件。我的关联数组是 sqlsrv_fetch_array 函数的结果。

当我运行代码时:

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
  echo '<pre>';
  print_r($row);
  echo '</pre>';
}

我可以看到:

Array
  (
  [Username] => User1
  [Password] => Password1
  [DisplayName] => UserOne
  [FirstName] => User
  [LastName] => One
  [Role] => Bacon
  [HomeEmailAddress] => UserOne@email.com
)
Array
(
  [Username] => User2
  [Password] => Password2
  [DisplayName] => UserTwo
  [FirstName] => User
  [LastName] => Two
  [Role] => Egg
  [HomeEmailAddress] => UserTwo@email.com
)
Array
(
  [Username] => User3
  [Password] => Pasword3
  [DisplayName] => UserThree
  [FirstName] => User
  [LastName] => Three
  [Role] => Sausage
  [HomeEmailAddress] => UserThree@email.com
)

一切看起来都很好。但是,我遇到的问题是将其转换为 CSV 文件。我希望文件看起来像

Username,Password,DisplayName,FirstName,LastName,Role,HomeEmailAddress
User1,Password1,UserOne,User,One,Bacon,UserOne@email.com
User2,Password2,UserTwo,User,Two,Egg,UserTwo@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com

我一直在努力让 fputcsv 工作,在 while 循环中使用 foreach ($row as $key => $value) 循环,但我无处可去。这是徒劳的追求吗?这可以在使用 _sql_fetch_array_ 创建的数组上完成吗?

如果我将代码放在 where 循环中:

$fp = fopen('file.csv', 'w');

foreach ($row as $key => $value) {
 fputcsv($fp, $row);
}

fclose($fp);

我得到一个带有输出的 csv 文件:

User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com
User3,Password3,UserThree,User,Three,Sauage,UserThree@email.com

任何提示或建议将不胜感激。

【问题讨论】:

  • 恐怕无法理解预期输出背后的原理。什么是分隔符,从两个开始的不确定数量的空格?如果数据本身包含空格怎么办?你确定这是 CSV,而不是一些固定宽度的文件格式吗?另外,奇怪的是,您认为数据库代码比您使用 fputcsv() 更相关。
  • 可能是一个形式不佳的问题,因为我不理解我脑海中的某些东西。我对这些东西非常缺乏经验。
  • 您得到了正确的 CSV。您想要的文件格式看起来不像 CSV。您获得了哪些具体规格?
  • 对不起,你是对的。我已经编辑了我的原始问题,所以我想要的结果是正确的 csv。感谢您指出这一点,我的错。我编辑的是我想要的样子。

标签: php csv associative-array


【解决方案1】:

您需要组合您拥有的两组代码(即读取每一行,然后将该行写入您的 CSV。

$fp = fopen('file.csv', 'w');
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
 fputcsv($fp, $row);

}

fclose($fp);

您的做法只是查看一行。

【讨论】:

  • 谢谢!根据我的阅读,我认为我必须使用 foreach 循环。我可以在标题中进行硬编码,但也可以在标题中添加一个解决方案,使其在未来更加灵活。不过,谢谢!
猜你喜欢
  • 2012-12-22
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 2018-10-04
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多