0

过程:

  1. 用户选中复选框以与客户帐户共享文件
  2. 复选框值与存储在客户文件夹中的 txt 文件中的数组进行比较
  3. 数组通过使用 array_merge() 合并为一个数组进行比较
  4. 使用 array_unique() 消除重复项
  5. 写入 txt 文件的新数组

问题:

如果我的文本文件已经包含以下数据:(代表文本文件行的数字)

  1. M HTH A277 Frame Off STD 规格 02-01-12.pdf
  2. M HTH A277 框架标准规格 02-01-12.pdf
  3. M HTH 期权罐价格表 02-02-2012.xls

然后我尝试共享更多文件,包括那些已经共享的文件。我的新文本文件如下所示:(代表文本文件行的数字)

  1. M HTH A277 Frame Off STD 规格 02-01-12.pdf
  2. (空白的)
  3. M HTH A277 框架标准规格 02-01-12.pdf
  4. (空白的)
  5. M HTH 期权罐价格表 02-02-2012.xls
  6. (空白的)
  7. (空白的)
  8. M HTH A277 Frame Off STD 规格 02-01-12.pdf
  9. M HTH A277 框架标准规格 02-01-12.pdf
  10. M HTH 期权罐价格表 02-02-2012.xls
  11. 谷溪庄园 - 2010.pdf

上面的值是我正在处理的确切值。我试图尽可能彻底地解释这个可能会使事情变得混乱的解释。如果有人可以向我提供任何建议,他们将不胜感激。提前致谢。到目前为止,这就是我所拥有的代码:

编码:

$arr = $_POST['checked'];
$cust = $_POST['custname'];

    if ($cust != ""){

        $myFile = "CONTA.txt";

        //If file exists get previous array from file
        if (file_exists("customer/" . $cust . "/" . $myFile)) {         

            $fh = fopen("customer/" . $cust . "/" . $myFile, 'r') or die("");

                while (!feof($fh) ) {
                        $compare[] = fgets($fh);
                }

            fclose($fh);

            //Combine checkbox array with previous array & eliminate duplicates

            $combined = array_unique(array_merge($compare,$arr));

        }
        else
        {

            //Since no previous file or array existed. Just use current checkbox array.     
            $combined = $arr;


        }

        //Input array into file
        $fh = fopen("customer/" . $cust . "/" . $myFile, 'w') or die("can't open file");

            foreach ($combined as $value) {

                    fwrite($fh, $value . "\n");

            }
        echo "<span class='message'>Items shared successfully!</span>";
        fclose($fh);
    }

}
4

1 回答 1

0

对我来说,问题似乎是“\n”字符。每行末尾都有一个新行,当您比较具有换行符的一行和没有换行符的同一行时,它们是不一样的。我会通过回显 fgets 中的每一行来确认这一点。如果它们是断行的,那么你知道你正在获得新的换行符。

编辑:
我会尝试默认放置
trim(fgets($fh))
它应该去除换行符
修剪规范

于 2012-04-08T03:36:57.320 回答