ペーストビン リンク: http://pastebin.com/4YCdbrsP
入力CSV形式、
number | itemid
1001, 121212
1001, 12991
1042, 99878
1042, 89776
1042, 87777
1045, 11010
1046, 22299
1049, 9875
期待される出力
[1001 => {121212,12991}]
[1042 => {99878, 89776, 87777}]
[1045 => {11010}]
[1046 => {22299}]
[1049 => {9875}]
上記の内容を持つ CSV ファイルから各行を読み取ろうとしています (2 列、各行には最初の列として "number" が含まれ、2 番目の列として関連する "itemid" が含まれます。
次の行に同じ「番号」がある場合、対応する「itemid」を配列にプッシュしたいと思います。次の行に同じ「番号」がある場合は、これを繰り返します。
以下は、私がこれまでに得た場所です。
$row = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE && $row < 8) {
$sku = $data[0];
$upc = $data[1];
$skuUpcList = array($sku => array());
array_push($skuUpcList[$sku], $upc);
$row++;
while(($data = fgetcsv($handle, 1000, ",")) !== FALSE && $row < 8) {
if($data[0] == $sku) {
array_push($skuUpcList[$sku], $data[1]);
$row++;
} else {
$sku = $data[0];
$upc = $data[1];
$skuUpcList = array($sku => array());
array_push($skuUpcList[$sku], $data[1]);
$row++;
}
$skuUpcList = array_unique($skuUpcList);
var_dump($skuUpcList);
echo '<br>';
}
}
=== 上記スクリプトの出力 ===
array(1) { [1001]=> array(2) { [0]=> string(6) "121212" [1]=> string(5) "12991" } }
array(1) { [1042]=> array(1) { [0]=> string(5) "99878" } }
array(1) { [1042]=> array(2) { [0]=> string(5) "99878" [1]=> string(5) "89776" } }
array(1) { [1042]=> array(3) { [0]=> string(5) "99878" [1]=> string(5) "89776" [2]=> string(5) "87777" } }
array(1) { [1045]=> array(1) { [0]=> string(5) "11010" } }
array(1) { [1046]=> array(1) { [0]=> string(5) "22299" } }
array(1) { [1049]=> array(1) { [0]=> string(4) "9875" } }
ご覧のとおり、スクリプトは正常に実行されますが、スクリプトが各「数字」を 1 回だけエコーするようにしていますが、上記の出力によると、「数字」1042 が 3 回表示されます。
var_dump() ステートメントを 2 番目の while ループの外に移動しようとしましたが、役に立たないようです。
これに関するヘルプは役に立ちます。
ペーストビン リンク: http://pastebin.com/4YCdbrsP