我知道围绕这个主题已经有很多问题了。但是,由于我不是PHP开发人员,我很难找到适合我的特定对象结构的东西。我有一个非常扁平的JSON结构,可以很好地被读入PHP。我所需要做的就是遍历对象数组,从第一个对象中的键创建CSV标题(它们都是相同的),然后使用所有对象属性编写CSV的每一行。
Array
(
[0] => stdClass Object
(
[record id] => -KA9S-beTbe9LIPBm_xK
[timestamp] => Wed Feb 10 2016 10:12:20 GMT+0100
[user id] => 33037t23nxyx1x5k
[user age] => 18-24
[user gender] => M
[user q1] => Yes
[user q2] => Yes
[user q3] => more
[answer q1 value] => 1
[answer q1 confidence] => 3
[answer q1 duration] => 262412
[answer q2 value] => 1
[answer q2 confidence] => 3
[answer q2 duration] => 1959
[answer q3 value] => 0
[answer q3 confidence] => 3
[answer q3 duration] => 2939
[answer q4 value] => 1
[answer q4 confidence] => 2
[answer q4 duration] => 1868
[answer q5 value] => 1
[answer q5 confidence] => 2
[answer q5 duration] => 2196
)
所以,你可以看到它应该是非常简单的。关键是CSV单元格标题,然后是每个记录的一行。
我希望有人能帮助我。我完全不懂PHP。
UPDATE:这是我最新的PHP文件。这是可行的。我不得不将Object转换为Array来获取Keys:
<?php
$data = $_POST['data'];
$response = json_decode($data);
$records_arr = $response->records;
$fp = fopen('records.csv', 'w');
$i = 0;
foreach ($records_arr as $record) {
// $record is an object so create an array
$record_arr = array();
foreach ($record as $value) {
$record_arr[] = $value;
}
if($i == 0){
fputcsv($fp, array_keys((array)$record));
}
fputcsv($fp, array_values($record_arr));
$i++;
}
fclose($fp);
echo print_r($records_arr);
?>
谢谢大家的帮助。了不起的社区!
4条答案
按热度按时间eanckbw91#
要将PHP数组写入CSV文件,应使用内置的PHP函数
fputcsv
:编辑:
基于您的数据输入的更具体示例:
编辑2:
基于新的信息(您有一个JSON字符串作为开始),我添加了这个示例,作为将数据写入CSV文件的更好方法:
ncecgwcz2#
尝试以下csv的解决方案标题将是(项目、成本、批准人)-将
$data
替换为数组变量:有关详细信息,请参阅:PHP: fputcsv - Manual
mepcadol3#
我之前已经为此创建了一个函数。下面的代码没有假设有任何csv头。
如果这不是你想要的,请告诉我,我会修改答案。
fsi0uk1n4#
您可以尝试以下代码将数据写入csv