我有一个看起来像这个
的数组$cars = array
(
array("Name","Price","Hours"),
array("AMW",15,13),
array("Saab",5,2),
array("Cand Rover",17,15)
);
我正在尝试将此数组转换为CSV数据,以便我可以将其写入文件。
我有一个函数,它将数组作为输入并将其转换为CSV格式。它看起来像这样:
function array_2_csv($array)
{
$csv = array();
foreach ($array as $item)
{
if (is_array($item))
{
$csv[] = array_2_csv($item);
$csv[]="\r\n";
}
else
{
$csv[] = $item;
}
}
return implode(',', $csv);
}
它有效,但在线条前面会出现一个额外的逗号。我该如何删除?
预期输出
Name,Price,Hours
AMW,15,13,
Saab,5,2,
Cand Rover,17,15
我得到的输出是:
Name,Price,Hours,
,AMW,15,13,
,Saab,5,2,
,Cand Rover,17,15,
完整代码
$cars = array
(
array("Name","Price","Hours"),
array("AMW",15,13),
array("Saab",5,2),
array("Cand Rover",17,15)
);
$csv_data = array_2_csv($cars);
echo $csv_data;
function array_2_csv($array)
{
$csv = array();
foreach ($array as $item)
{
if (is_array($item))
{
$csv[] = array_2_csv($item);
$csv[]="\r\n";
}
else
{
$csv[] = $item;
}
}
return implode(',', $csv);
}
答案 0 :(得分:2)
如果您要将内容写入文件,那么为什么不切断中间人并使用fputcsv()。
这样你的功能看起来像是:
function array_2_csv($array, $fileName)
{
$file = fopen($fileName, 'w');
foreach ($array as $fields) {
fputcsv($file, $fields);
}
fclose($file);
}
然后你的电话会是这样的:
array_2_csv($cars, 'path-to-file')
希望这有帮助!
答案 1 :(得分:1)
如下所示(代码修改): -
$csv_data = array_2_csv($cars);
echo $csv_data;
function array_2_csv($array)
{
$csv = ''; //take string
foreach ($array as $item)
{
if (is_array($item))
{
$csv .= implode(',',$item); // implode and add to string
$csv .="\r\n"; // add new line
}else{
$csv .= $item; // direct add value to string
$csv .="\r\n"; //add new line
}
}
return $csv; //return string
}
输出: - https://eval.in/752820
答案 2 :(得分:1)
您可以执行更多功能样式并使用array_map
以及几个implode
函数:
function array_2_csv(array $array, $delimiter = ',')
{
return implode('', array_map(function ($item) use ($delimiter) {
return implode($delimiter, $item) . PHP_EOL;
}, $array));
}
这是working demo。
但如果您只想将结果写入文件,那么@RossWilson answer会更好。由于fputcsv
可以正确转义引号,也可以使用$delimeter
选项和$escape_char
选项。
至于为什么你在自己的代码中得到这么多逗号。首先,你将一些东西摧毁了两次。其次,你是在爆炸之前添加行尾符号,所以符号也会被逗号破坏。