我有从txt文件中提取数组的代码,它正在删除我不需要的列并将其插入到csv文件中。我正在使用的代码是删除列,但我希望它检查两列,如果一个为空,则将其删除并使用下一列。它不是根据列 12 是否为空而循环每行,它基本上只是对第一行运行一次 if 语句并将其应用于每一行。while ($data = fgetcsv($f_in, 8000, "|")) { $columns = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of columns if (empty($columns['12'])) { $unwanted = [1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of unwanted columns foreach($unwanted as $i) { unset($data[$i]); } } else { $unwanted = [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of unwanted columns foreach($unwanted as $i) { unset($data[$i]); } } fputcsv($f_out, $data, ',', '"');我得到相同的结果,而不是为每行循环。 if ($columns['12'] > 0) 谢谢
1 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
这是一个更干净的解决方案:你基本上希望在每行的第13列的空性的结果csv基中有两个项目($data[12]指向第13列作为数组从元素0开始计数)。
所以不需要做所有的循环,而只是从两个数组元素创建你需要的数组并推动它们。
while ($data = fgetcsv($f_in, 8000, "|")) {
if (empty($data[12])) {
$result = [$data[0],$data[13]];
} else {
$result = [$data[0],$data[12]];
}
fputcsv($f_out, $result, ',', '"');
p.s. 如果你计算错了自己,实际上不想检查原始项目的第一列索引,并从$result数组中删除$data[0]。
你也可以这样写,并花哨:)
while ($data = fgetcsv($f_in, 8000, "|")) {
$result = empty($data[12]) ? [$data[0],$data[13]] : [$data[0],$data[12]];
fputcsv($f_out, $result, ',', '"');
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报
0/150
提交
取消