data.csv を検討してください。
"1","2","3","4"
"5","6","7","8"
"9","10","11","12"
"13","14","15","16"
"17","18","19","20"
"21","22","23","24"
"25","26","27","28"
"29","30","31","32"
"33","34","35","36"
この CSV を読み取り、n 番目ごとに連結する必要があります。たとえば、3 行ごとに連結する必要があります。したがって、望ましい出力は次のとおりです。
array (
[0] => 1,2,3,4,13,14,15,16,25,26,27,28 // row 1, 4 and 7
[1] => 5,6,7,8,17,18,19,20,29,30,31,32 // row 2, 5 and 8
[2] => 9,10,11,12,21,22,23,24,33,34,35,36 // row 3, 6 and 9
)
n を変数にする必要があるため、たとえば、4 行ごとに連結することも簡単です。
array (
[0] => 1,2,3,4,17,18,19,20,33,34,35,36 // row 1, 5 and 9
[1] => 5,6,7,8,21,22,23,24 // row 2, 6
[2] => 9,10,11,12,25,26,27,28 // row 3, 7
)
私は今これを持っています:
$path = "data.csv";
$row = 1;
if (($handle = fopen($path, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
for ($i = 1; $i <= 3; $i++) { // concatenate every 3rd row
if ($row % $i == 0) $newrows[$i] .= implode(",", $data);
}
$row++;
}
}
print_r($newrows);
しかし、出力されるため、期待どおりに機能しません
Array (
[1] => 1,2,3,45,6,7,89,10,11,1213,14,15,1617,18,19,2021,22,23,2425,26,27,2829,30,31,3233,34,35,36
[2] => 5,6,7,813,14,15,1621,22,23,2429,30,31,32
[3] => 9,10,11,1221,22,23,2433,34,35,36
)
もっと良いアイデアはありますか?この数学的論理はいつも私を困惑させます! :-)