我有一个CSV文件,其中包含逐行数据。 scenerio是我的两个列始终具有相同的值。
假设,如果在第1行中,第0列和第1列具有相同的值,则首先将其简单地存储在数组中,其中包含我想要循环的其他值。
在下一次迭代中,它检查前一个数组中是否已存在第0列和第1列值,因此将第1列和该列数据循环到新数组,直到前面的行第0列和第1列具有不同的值。
以下是CSV文件数据:
PickTicketNumber OrderNumber LineItemUpc LineItemUnitPrice LineItemQuantity
218837 204127 LR8025BLKMD 58 4
218837 204127 LR8025BLKLG 58 3
218837 204127 LR8475HEASM 54 1
218837 204127 LR8770ROYLG 53 1
218838 204128 LR8475HEAXS 54 1
218838 204128 LR8475HEASM 54 2
218838 204128 LR8475HEAMD 54 2
218838 204128 LR8475HEALG 54 1
218838 204128 LR8917BLKXS 58 1
218838 204128 LR8917BLKSM 58 1
218838 204128 LR8917BLKMD 58 1
218838 204128 LR8917BLKLG 58 1
218838 204128 LR6382BLKXS 48 1
218838 204128 LR6382BLKSM 48 2
218838 204128 LR6382BLKMD 48 2
218838 204128 LR6382BLKLG 48 1
218838 204128 LR8475BLKSM 54 2
218838 204128 LR8475BLKMD 54 2
218838 204128 LR8475BLKLG 54 1
218839 204130 LR8878HEAXL 63 1
如此清楚,218837 204127存在4次,所以我只想要一次并循环其LineItemUpc LineItemUnitPrice LineItemQuantity。
在最终结果中,我希望以这种方式看到结果:
218837 204127
仅一次,如果它再次存在于下一行,则再次循环其LineItemUpc LineItemUnitPrice LineItemQuantity。循环中的手段我想要:
LR8025BLKMD 58 4
LR8025BLKLG 58 3
LR8475HEASM 54 1
LR8770ROYLG 53 1
其他元素也是如此。
表示一个PickTicketNumber OrderNumber并在具有相同PickTicketNumber OrderNumber的即将到来的行中循环所有值,直到新的PickTicketNumber OrderNumber出现新的PickTicketNumber OrderNumber。
最后我的最终结果是:
<reference>218837 / 204127</reference>
<line>LR8025BLKMD</line>
<price>58<price>
<qty>3<qty>
<line>LR8025BLKLG</line>
<price>58<price>
<qty>1<qty>
<line>LR8475HEASM</line>
<price>54<price>
<qty>1<qty>
<line>LR8770ROYLG</line>
<price>53<price>
<qty>1<qty>
答案 0 :(得分:0)
我仍然不确定你想要什么作为你的最终结果,但我希望这能让你前进:
<?php
$result = array();
if (($handle = fopen("test.csv", "r")) !== FALSE) {
$row = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// Create a unique key based on the first two fields
$unique = $data[0] . '-' . $data[1];
// Test if this key already exists in the array. If not, create it.
if (!array_key_exists($unique, $result)) {
$result[$unique] = array(
'PickTicketNumber' => $data[0],
'OrderNumber' => $data[1],
'Data' => array(),
);
}
// Append the actual data (all columns except the first two)
$result[$unique]['Data'][] = array_slice($data, 2);
}
fclose($handle);
}
echo "<pre>".print_r($result,1)."</pre>";
这应该是这样的:
Array(
'218837-204127' => Array(
'PickTicketNumber' => 218837,
'OrderNumber' => 204127,
'Data' => Array(
array('LR8...MD',58,4),
array('LR80..LG',58,3),
etc.
)
),
'218838-204128' => Array(
etc.
),
)
我希望能回答你的问题。