我想使用PHP循环和数组将多个值写入单个csv单元格。使用PHP循环和数组将多个值写入单个csv单元格
$data = array
(
3 => array
(
'name' => 'Mars',
'type' => 'Terrestrial Planet',
'diameter' => 0.532,
'mass' => 0.11,
'rings' => 0,
'position' => 4,
'gases' => array
(
0 => 'CO2',
1 => 'N2',
2 => 'Ar'
),
'satellites' => array
(
0 => array
(
'name' => 'Phobos',
'radius' => 6.20
),
1 => array
(
'name' => 'Deimos',
'radius' => 6.20
)
)
)
);
function writeCSV($array){
$str = [];
$fp = fopen('file.csv', 'w');
fputcsv($fp, array('Name','Type','Diameter','Mass','Rings','Position','Gases','Satellite-Name','Satellite-Radius'),"\t");
foreach ($array as &$fields) {
$str[] = $fields['name'];
$str[] = $fields['type'];
$str[] = $fields['diameter'];
$str[] = $fields['mass'];
$str[] = $fields['rings'];
$str[] = $fields['position'];
if(is_array($fields['gases'])){
foreach ($fields['gases'] as $gas)
array_push($str, $gas);
}
if(is_array($fields['satellites'])){
foreach ($fields['satellites'] as $satellite)
$str[] = $satellite['name'];
foreach ($fields['satellites'] as $satellite)
$str[] = $satellite['radius'];
}
fputcsv($fp, $str);
$str = [];
}
}
writeCSV($data);
?>
这样做的结果,写道:
Name Type Diameter Mass Rings Position Gases Satellite-Name Satellite-Radius
Mercury,"Terrestrial Planet",0.382,0.06,0,1
Venus,"Terrestrial Planet",0.949,0.82,0,2,CO2,N2
Earth,"Terrestrial Planet",1,1,0,3,N2,O2,Ar,Moon,1737.1
Mars,"Terrestrial Planet",0.532,0.11,0,4,CO2,N2,Ar,Phobos,Deimos,6.2,6.2
到文件中。我真的需要它通过拦截卫星写入多个(气体,卫星名称卫星半径)值到一个空格分隔并用引号引用,说一个单细胞,即
Name Type Diameter Mass Rings Position Gases Satellite-Name Satellite-Radius
Mercury,"Terrestrial Planet",0.382,0.06,0,1
Venus,"Terrestrial Planet",0.949,0.82,0,2,"CO2 N2"
Earth,"Terrestrial Planet",1,1,0,3,"N2 O2 Ar",Moon,1737.1
Mars,"Terrestrial Planet",0.532,0.11,0,4,"CO2 N2 Ar","Phobos Deimos","6.2 6.2"
我想这会发生,气体循环以某种方式,但我正在努力连接或增加气体和卫星循环,以获得数据到一个阵列单元值。
2014-03-30
cookie
+0
首先将气体和卫星追加到单个字符串中,然后将它们推送到堆栈,即这些条目需要位于单个索引中(请参阅fputcsv文档,说明为什么当前实现出错)。 –