希望从一个CSV文件中获取ID,该文件在php的其他列中具有相同的值
我想根据第二列中具有相同数据的值获取CSV文件第一列中的ID。 我的意思是,如果代码在csv中是EF,那么对于其他代码,它的ID值应该是1,2,3,4,5,依此类推。 因此,我在字符串中获取所有代码值,并在数组中分解它。dn试图获取具有匹配代码值的ID,但未成功。请帮忙 CSV文件:希望从一个CSV文件中获取ID,该文件在php的其他列中具有相同的值,php,for-loop,while-loop,fgetcsv,Php,For Loop,While Loop,Fgetcsv,我想根据第二列中具有相同数据的值获取CSV文件第一列中的ID。 我的意思是,如果代码在csv中是EF,那么对于其他代码,它的ID值应该是1,2,3,4,5,依此类推。 因此,我在字符串中获取所有代码值,并在数组中分解它。dn试图获取具有匹配代码值的ID,但未成功。请帮忙 CSV文件: 1,EF,Total Amount Invested,1190000,600000,360000,120000, 2,EF,Market Value,2457939,852578,453191,132471,201
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);
下面是一个简化版本,它使用in_数组检查正确的代码值,然后使用代码作为键在$ids数组中构建2个子数组 然后它只是一个数据表示的例子,所以只需循环您创建的数组,并以您喜欢的任何格式生成输出
EF - 1,2,3,4,5
AF - 6,7,8,9,10
第一个循环创建$ids数组,如下所示
第二个输出结果,但您可以根据实际需要进行更改
您的while和for循环的方式是错误的,尽管有更简单的方法来实现这一点您需要为CSV中不存在的代码获取一个空数组吗?如果没有,您不需要预先提供一个包含所有可能值的数组,只需使用一个循环对数据进行循环,并将ID放入目标数组的正确条目中。虽然$col_sip[]=fgetcsv是错误的,但每次都会将一个新项附加到$col_sip。这应该在$col_sip=fgetcsv和for循环完全删除时进行,请参见上面的注释。在循环内部,只需执行$ids[$col_sip[1]][]=$col_sip[0]@乔先生,如果你不删除这个问题,我将向你展示你能多么容易地达到你想要的结果
$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;
}
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