0
PHP 루프 및 배열을 사용하여 단일 csv 셀에 여러 값을 쓰려고합니다.PHP 루프 및 배열을 사용하여 단일 csv 셀에 다중 값 쓰기
<?php
$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"
여러 (가스, 위성-이름 위성-반경) 값을 작성해야하고 가스는 어떻게 든 루프되지만 데이터를 하나의 배열 셀 값으로 가져 오기 위해 가스와 위성 루프를 연결하거나 보강하는 데 어려움을 겪고 있습니다.
먼저 가스와 위성을 단일 문자열에 추가 한 다음 스택에 밀어 넣습니다. 즉,이 항목은 단일 색인에 있어야합니다 (fputcsv 문서에서 현재 구현이 잘못되어있는 이유 참조). – pbond