PHP使用子数组将json转换为csv
我正在创建php代码来将下面的json转换为csvPHP使用子数组将json转换为csv,php,csv,fputcsv,Php,Csv,Fputcsv,我正在创建php代码来将下面的json转换为csv Array ( [data] => Array ( [0] => Array ( [DESC] => bla bal bal [SOLD] => 0 [contact_no] => 1234
Array
(
[data] => Array
(
[0] => Array
(
[DESC] => bla bal bal
[SOLD] => 0
[contact_no] => 1234
[title] => Hiiiii
[price] => 10900
[big_image] => Array
(
[0] => http://example.com/images/user_adv/14.jpg
[1] => http://example.com/images/user_adv/15.jpg
)
[small_image] => Array
(
[0] => http://example.com/images/user_adv/small/14.jpg
[1] => http://example.com/images/user_adv/small/15.jpg
)
[tpe] => user
)
[1] => Array
(
[DESC] => fo fo fof ofof
[SOLD] => 0
[contact_no] => 234522
[title] => Hellooooo sddf
[price] => 0
[big_image] => Array
(
[0] => http://example.com/images/user_adv/154.jpg
[1] => http://example.com/images/user_adv/144.jpg
[2] => http://example.com/images/user_adv/147.jpg
)
[small_image] => Array
(
[0] => http://example.com/images/user_adv/small/154.jpg
[1] => http://example.com/images/user_adv/small/144.jpg
[2] => http://example.com/images/user_adv/small/147.jpg
)
[tpe] => user
)
)
[pis] => 3
[totals] => 23
[curpage] => 1
[total_ads] => 71
)
我一直在使用下面的代码将其导出到.csv
$fp = fopen("output.csv","w");
foreach ($json['data'] as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
我可以很好地转换它,但我面临一个小问题,即子数组big_image&small_image没有出现在输出文件.csv中(该行为空)
顺便说一下,如果我替换:
foreach ($json['data'] as $fields) {
与
我将链接图片作为输出,因此我需要将它们合并为一个输出
foreach ($json['data'] as $fields) {
foreach ($json['data'][0] as $fields2) {
编辑:
这里是输出
编辑2:
我希望输出是这样的
您可以创建一个函数来确保这些嵌套数组是平面的。您可以为此创建一个实用程序函数,如下所示:
function array_flatten ($nonFlat) {
$flat = array();
foreach (new RecursiveIteratorIterator(
new RecursiveArrayIterator($nonFlat)) as $k=>$v) {
$flat[$k] = $v;
}
return $flat;
}
这样称呼它:
$fp = fopen("output.csv","w");
foreach ($json['data'] as $fields) {
fputcsv($fp, array_flatten($fields));
}
fclose($fp);
听起来你需要测试一下
是否是数组()
,如果是的话,然后对它们进行循环,比如如果(是数组($fields)){foreach($fields2的字段){fputcsv($fp,$fields2);}否则{fputcsv($fp,$fields);}
可能是这样的:?我已经按照下面的链接更改了我的代码$fp=fopen($output.csv”,“w”);foreach($json作为$fields){$iresult=[];数组_walk_recursive($fields,function($item)使用(&$iresult){$iresult[]=$item;});fputcsv($fp,$iresult);}
现在正在运行,但它们都在一行中,我想需要一些编辑谢谢你的努力,实际上我已经添加了第一个代码,但是我得到了类似警告PHP警告:fputcsv()预期参数2是数组,字符串在第36行的/var/www/mycall.php中给出,但在output.csv文件中只写入图像路径,大小不一……对于我得到的第二个代码,错误php警告:fputcsv()预计参数2是数组,字符串在第37行的/var/www/mycall.php中给出,在output.csv文件中没有任何内容。我还想知道为什么我需要为数组图像大小设置测试数组,因为它应该是它们的?似乎正在工作,但在链接图片的输出中仍然面临小问题…图片的每个链接都有一行,所以像糟糕的ook一样,需要将每组图片放在一行上。你是指列,而不是行,对吗?你能在问题中提供预期的输出吗?你需要所有的图片URL,还是第一个就足够了。因为将它们放在一列中……我不确定你将如何格式化。不是所有的图片URL,意味着每个数组都有一个组供我使用我已经更新了我的问题并添加了输出图片
function array_flatten ($nonFlat) {
$flat = array();
foreach (new RecursiveIteratorIterator(
new RecursiveArrayIterator($nonFlat)) as $k=>$v) {
$flat[$k] = $v;
}
return $flat;
}
$fp = fopen("output.csv","w");
foreach ($json['data'] as $fields) {
fputcsv($fp, array_flatten($fields));
}
fclose($fp);