хотите получить идентификаторы из файла CSV с такими же значениями в другом столбце в php - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу получить идентификаторы, которые находятся в первом столбце файла CSV в соответствии со значениями во втором столбце, имеющем те же данные. Я имею в виду, что если в CSV указан код EF, то значение идентификатора должно быть 1,2,3,4,5 и т. Д. Для других кодов. Итак, я взял все значения кода в строке и разнес это в массиве. Dn пытался получить идентификаторы с соответствующими значениями кода, но не удалось. Пожалуйста, помогите

CSV-файл:

1,EF,Total Amount Invested,1190000,600000,360000,120000,
2,EF,Market Value,2457939,852578,453191,132471,2019/12/31
3,EF,Returns (Annualised),14.01,14.03,15.54,19.8,
4,EF,Benchmark Returns (Annualised),11.48,11.51,11.38,14.05,
5,EF,Additional Benchmark Returns (Annualised),12.23,12.75,13.42,16.28,
6,AF,Total Amount Invested,910000,600000,360000,120000,
7,AF,Market Value,1636525,845919,434171,132677,2019/12/31
8,AF,Returns (Annualised),15.13,13.71,12.56,20.14,
9,AF,Benchmark Returns (Annualised),11.94,11.51,11.38,14.05,
10,AF,Additional Benchmark Returns (Annualised),12.31,10.57,9.2,12.48,

Мой код:

$fileName_sip = '/var/www/html/php/csv/file.csv';

$file_sip = fopen($fileName_sip, "r");
fseek($file_sip, 1, SEEK_CUR);
$sc_str = "EF,CF,TA,TS,BD,EF,ST,IS,TP,AG,MC,DB,CM,IF,CO,AF,O,EA,ES,CG,GO,NE,DE,ML,WF,EH,US,SC,OG,MM,ON,NI,RA,RC,RD";
$sc_arr = explode(',', $sc_str);
//echo "<pre>";print_r($sc_arr);die;
$i=0;
$ids =array();
for ($i=0; $i < count($sc_arr); $i++) { 

    while (($col_sip[] = fgetcsv($file_sip, 10000, ",")) !== FALSE) {

        if ($col_sip[1] == $sc_arr[$i]) {
            $ids[$i] = $col_sip[0];
        }
    }
}
echo "<pre>";print_r($ids);

Я хочу, чтобы результат был:

EF - 1,2,3,4,5
AF   6,7,8,9,10

1 Ответ

1 голос
/ 26 февраля 2020

Вот упрощенная версия, которая использует in_array() для проверки правильности значения кода, а затем просто строит 2 подмассива в массиве $ids, используя код в качестве ключа.

Тогда это просто случай представления данных, поэтому просто l oop над созданным вами массивом и сгенерируйте вывод в любом формате, который вам нравится.

$file_sip = fopen($fileName_sip, "r");
$sc_str = "EF,CF,TA,TS,BD,EF,ST,IS,TP,AG,MC,DB,CM,IF,CO,AF,O,EA,ES,CG,GO,NE,DE,ML,WF,EH,US,SC,OG,MM,ON,NI,RA,RC,RD";
$sc_arr = explode(',', $sc_str);
$ids = [];

while (($row = fgetcsv($file_sip, 10000, ",")) !== FALSE) {
    if (in_array($row[1], $sc_arr)) {
        $ids[$row[1]][] = $row[0];
    }
}
print_r($ids);

// make into a string
foreach ($ids as $key => $id){
    echo $key . ' - ' . implode(',', $id) . PHP_EOL;
}

Первый l oop создает $ids массив вроде этого

Array
(
    [EF] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )

    [AF] => Array
        (
            [0] => 6
            [1] => 7
            [2] => 8
            [3] => 9
            [4] => 10
        )

)

И второй выводит результаты, но вы можете изменить это в соответствии с вашими фактическими потребностями.

EF - 1,2,3,4,5
AF - 6,7,8,9,10
...