PHP:将复杂的json输出到csv

PHP:将复杂的json输出到csv,php,json,csv,output,Php,Json,Csv,Output,我正在寻找一种解决方案来呈现json字符串,如下所示: {"result_count":5,"total_count":"1102","next_offset":5,"entry_list":[{"id":"00003010000000","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003010000000"},"name":{"name":"name","value":"Undefinier

我正在寻找一种解决方案来呈现json字符串,如下所示:

 {"result_count":5,"total_count":"1102","next_offset":5,"entry_list":[{"id":"00003010000000","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003010000000"},"name":{"name":"name","value":"Undefiniert"},"phone_work":{"name":"phone_work","value":""},"phone_mobile":{"name":"phone_mobile","value":"01"}}},{"id":"00003015000003","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000003"},"name":{"name":"name","value":"Christian X"},"phone_work":{"name":"phone_work","value":""},"phone_mobile":{"name":"phone_mobile","value":"0043 699 23231"}}},{"id":"00003015000005","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000005"},"name":{"name":"name","value":"Mario X"},"phone_work":{"name":"phone_work","value":"0043 1 232 151"},"phone_mobile":{"name":"phone_mobile","value":"0043 699 1112"}}},{"id":"00003015000006","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000006"},"name":{"name":"name","value":"Renate X"},"phone_work":{"name":"phone_work","value":"0043 1232 133"},"phone_mobile":{"name":"phone_mobile","value":""}}},{"id":"00003015000007","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000007"},"name":{"name":"name","value":"Harald KrX"},"phone_work":{"name":"phone_work","value":"0043 232 150"},"phone_mobile":{"name":"phone_mobile","value":"00423"}}}],"relationship_list":[{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(X) X"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(Y) Y"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(C) C"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(D) D"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(E) E"}}}]}]}]}
输入一个CSV文件,其中包含生成的内容

"ID","NAME","PHONE_WORK","PHONE_MOBILE","COMPANY"
因此,在本例中:

"00003015000003","Christian X","","0043 699 23231","X"<br/>
....<br/>
...
我想这很复杂。。。但也许有人可以帮我。

没那么难:

<?php

$json = '....';
$data = json_decode($json);

# print_r($data); #de-comment to debug

# print title
fputcsv(STDOUT,array("ID","NAME","PHONE_WORK","PHONE_MOBILE","COMPANY"));

foreach ( $data->entry_list as &$rec )
{
    $val = &$rec->name_value_list;
    fputcsv(STDOUT,array( $val->id->value,
                          $val->name->value,
                          $val->phone_work->value,
                          $val->phone_mobile->value ));
    # no data available for COMPANY!
}
?>

这是您想要的,公司名称为:

$array = json_decode($JSON,true);

/*get companies name*/
$companies = array_map(function($arr){
  array_walk_recursive($arr,function($a,$key) use (&$return) { return $return[$key] = $a;});
  return preg_replace('/\(\w\) /','', $return['value']);
},$array['relationship_list']);

/*get employees details*/
$array = array_column($array['entry_list'],'name_value_list');

$headers = array_map('strtoupper',array_merge(array_keys($array[0]),['company']));

$out = fopen('file.csv','w');
fputcsv($out,$headers);

foreach($array as $key => $info){
  fputcsv($out, array_merge(array_column($info,'value'),[$companies[$key]]));
}
fclose($out);

我想这很复杂当你知道你在做什么的时候没有什么是真正复杂的,但是你需要表现出最小的努力,尝试一下自己,然后告诉我们你做了什么来回答你自己的问题。我们帮助调试,而不是为您做所有的工作:-看什么和。做一些研究,搜索相关话题等;如果您遇到困难,请发布您的尝试,注意输入和预期输出。使用json_decode$json,true将json转换为数组,然后通过数组[entry_list]迭代@你是对的。但我尝试了很多小时,但我还远没有成为一个真正的程序员,所以我努力失败了——我很高兴有人发布了一个代码示例,它可以工作,我从来没有自己写过它。但我现在可以用这个样本来完成我的工作:谢谢大家!为什么&$rec而不是简单的$rec?如果我不更改数据,一般决定使用引用而不是副本。在这种情况下,不需要它,因为对象总是被引用的。所以这里不需要提示拷贝。几年前,引用显然比数组拷贝快。今天的快速测试无法发现它的任何时间优势。看来,现在更好地实现了写拷贝。谢谢,这并没有那么复杂-是真的,因为公司失踪了。。。困难的部分是让公司参与进来,因为它在json中。。。很高兴您的帖子上面有一个用户,发布了一个包括公司在内的代码!:无论如何,感谢您的时间和代码示例!哇!这正是我一直在寻找的。。。它和我想的一样复杂,需要使用数组映射。。。我的编码技术还不够好,我想我自己也无法编码。。。所以我感谢你抽出时间来得到这个!当我尝试代码示例时,我认识到的一件事是,有时它会在字段数据周围添加,有时则不会。。。是否可以始终为字段数据添加as环绕字符?@xantos84代码示例缺少引号有时是因为fputcsv仅在某些条件下用引号括起字段,这正是您所要查找的。