我的代码将多维数组转换为 csv 时遇到此问题。
这是我的数组的结构
Array (
[vbas31] =>
Array ( [enabled] => Array ( [0] => NO )
[registered] => Array ( [0] => NO ) )
[bnmsa1] =>
Array ( [enabled] => Array ( [0] => YES )
[registered] => Array ( [0] => NO )
[compromised] => Array ( [0] => NO ) )
)
我想将其保存到 csv 文件以用于报告目的,如下所示:
vbas31, enabled, no, registered, no bnmsa1, enabled, yes, registered, no, compromised, no
我在代码中所做的事情是这样的:
$file = fopen('testfile.csv','w');
$keysarr = array_keys($jsonArr);
for($i = 0; $i < count($jsonArr); $i++) {
foreach($jsonArr[$keysarr[$i]] as $key => $value) {
echo $key . " : " . $value[0] . "<br>";
}
$new_line = [$keysarr[$i], $key, $value[0]];
fputcsv($file, $new_line);
}
fclose($file);
但是输出不是我想要的,这是我的代码生成的输出:
vbas31, registered, no bnmsa1, compromised, no
它只获取数组中的最后一个数据。我可以问我的代码有什么问题以及我做错了什么吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我不喜欢嵌套循环,也不喜欢提供的答案,但看看这个:
你的数组:
$yourArray = [ 'bnas31' => [ 'enabled' => [0 => 'NO'], 'registered' => [0 => 'NO'] ], 'bnmsa1' => [ 'enabled' => [0 => 'YES'], 'registered' => [0 => 'NO'], 'compromised' => [0 => 'NO'] ] ];代码:
foreach($yourArray as $key1 => $value1) { $row = $key1; $line = [$key1]; foreach ($value1 as $key2 => $value2) { $row .= ','.$key2.','.$value2[0]; $line = array_merge($line, [$key2, $value2[0]]); } echo $row.''; }
您可以在另一个
foreach中使用另一个foreach。 :) 您可以先将键添加到新行,然后迭代其余元素并添加它们。$row变量仅用于检查结果。代码很简单,你应该可以自己分析。
上述代码的结果是:
问候。