如果语句在前一个 PHP 中

我有从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) 

谢谢


慕的地6264312
浏览 72回答 1
1回答

qq_花开花谢_0

这是一个更干净的解决方案:你基本上希望在每行的第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, ',', '"');
打开App,查看更多内容
随时随地看视频慕课网APP