Как получить значения CSV на основе уникального столбца (если найден уникальный столбец, зациклите его некоторые столбцы)

У меня есть файл CSV, у которого есть данные строка за строкой. SSCNERIO — это то, что 2 моих столбца всегда имеют одинаковые значения.

Предположим, что если в строке 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

Решение

Я до сих пор не уверен, что вы хотите, чтобы ваш конечный результат, но я надеюсь, что это поможет вам:

<?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.
),
)

Я надеюсь, что это отвечает на ваш вопрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]