PHP数组与数组(2d数组?)转换为csv

PHP数组与数组(2d数组?)转换为csv,php,arrays,laravel,csv,Php,Arrays,Laravel,Csv,我试图从一个包含一些数据和另一个数组的数组中创建一个CSV 代码: 所以,我有一些数据,比如经销商的姓名、电话等,以及经销商拥有的一系列产品。我的思路是对products数组进行json_编码,然后将其附加到正在推送到csvData数组的字符串中。但这样做的结果是: 姓名、电话、电子邮件、是否处于活动状态、街道名称、号码、邮政编码、城市、特殊id、产品 “某个名字”,11111111,example@example.com,1,xxxx,x,xxxx,xxxxxxxx,96548,“[“nBu

我试图从一个包含一些数据和另一个数组的数组中创建一个CSV

代码:

所以,我有一些数据,比如经销商的姓名、电话等,以及经销商拥有的一系列产品。我的思路是对products数组进行json_编码,然后将其附加到正在推送到csvData数组的字符串中。但这样做的结果是:

姓名、电话、电子邮件、是否处于活动状态、街道名称、号码、邮政编码、城市、特殊id、产品
“某个名字”,11111111,example@example.com,1,xxxx,x,xxxx,xxxxxxxx,96548,“[“nBuGbW”,“qP3DAF”]”

“另一个名字”,2222,anoter@example.com,0,xxxxxxxx,x,xxxx,xxxxxx,,“[“nBuGbW”“,“IRTQBN”“]”
问题是您正在手动构造-invalid-csv:

$csvData[] = $dealer->name . ',' . $dealer->phone . ',' . $dealer->email . ',' 
    . $dealer->is_active . ',' . $dealer->address->streetname . ',' . $dealer->address->number . ',' 
    . $dealer->address->zip . ',' . $dealer->address->city . ','
    . $dealer->special_id . ',' . $products;
您的
$products
json也将包含逗号,因此当您在逗号上使用
explode()
时,您的数据将被弄乱,您的json无效:

foreach ($csvData as $exp_data) {
    // Here you break your json data
    fputcsv($file, explode(',', $exp_data));
}
您应该改用多维数组,这样就不需要进行分解:

$csvData[] = [
    $dealer->name,
    ...
    $products,
];
以及:


请注意,使其成为有效的csv将导致转义,例如双引号。因此,它在某种程度上看起来仍然很奇怪:-)

这应该是一条评论,但有点长(正如jeroen所说,您所问的问题是,您对CSV数据进行了双重编码)

我的思路是对products数组进行json_编码,然后附加到字符串中

因此,你有发明自己编码系统的勇气——这意味着你可以控制编码和解码数据的代码。但为什么要将数据写入平面文件

如果您使用平面文件作为数据库,您将面临一个痛苦的世界。程序员一直在使用Oracle、MySQL、MongoDB、Redis等东西是有原因的。。。。至少在过去40年里

另一方面,如果您试图实现一种将数据发布到应用程序的不同实例的方法(它确实使用了适当的数据库),那么有很多更好的方法来实现这一点

如果您发布数据供其他人使用,那么您不应该发明编码


这看起来像是XY问题。

这可能会对你有所帮助:嗯,我不知道这些有什么帮助,我不知道你是否误解了我。我有一系列的经销商,每个经销商都有一系列的产品。因此,我想与经销商及其产品创建一个CSV。但是当我这样做的时候,CSV看起来很奇怪(上面的例子),嗯,这给了我:一些名字,8888888,example@example.com,1,xxxxxxx,x,xxxx,xxxxxxx,96548,“[”nBuGbW“,”qP3DAF“]”产品仍然包含在“”@Nissen中这是
var_dump()的确切结果吗?
?我希望引用整个部分,但该部分内的引用将用反斜杠转义。无论哪种方式,使用CSV,您将永远不会得到您想要的结果,因为CSV不支持嵌套的数据结构。当我导出并打开CSV时,它看起来是这样的:“姓名、电话、电子邮件、是否活动、街道名称、号码、邮政编码、城市、特殊id、产品”一些姓名,8888888,example@example.com,1,xxxxxx,x,xxxx,xxxxxxx,96548,“[“nBuGbW”,“qP3DAF”“。”“示例名称”,xxxxxxxx,example@someotherexample.com,1,xxxxxxx,x,xxxxx,xxxxxxx,,“[“nBuGbW”,“IRTQBN”]“@Nissen正如我所说,CSV不支持嵌套的数据结构,因此您永远无法获得所需输出中的可读性良好的格式。JSON非常接近,但这需要您每次只需要一行代码就可以读取和解析所有数据,所以这也远远不够完美。但我想这取决于你的用例。
$csvData[] = [
    $dealer->name,
    ...
    $products,
];
foreach ($csvData as $exp_data) {
    fputcsv($file, $exp_data);
}