簡體   English   中英

array_unique 不適用於從文本文件導入的文件名字符串

[英]array_unique not working with filename strings imported from text file

過程:

  1. 用戶選中復選框以與客戶帳戶共享文件
  2. 將復選框值與存儲在客戶文件夾中的 txt 文件中的數組進行比較
  3. arrays 通過使用 array_merge() 合並到一個數組中進行比較
  4. 使用 array_unique() 消除重復項
  5. 新數組寫入txt文件

問題:

如果我的文本文件已經包含以下數據:(數字代表文本文件行)

  1. M HTH A277 框架關閉標准規格 02-01-12.pdf
  2. M HTH A277 框架標准規格 02-01-12.pdf
  3. M HTH Option Can 價格表 02-02-2012.xls

然后我嘗試共享更多文件,包括那些已經共享的文件。 我的新文本文件如下所示:(數字代表文本文件行)

  1. M HTH A277 框架關閉標准規格 02-01-12.pdf
  2. (空白的)
  3. M HTH A277 框架標准規格 02-01-12.pdf
  4. (空白的)
  5. M HTH Option Can 價格表 02-02-2012.xls
  6. (空白的)
  7. (空白的)
  8. M HTH A277 框架關閉標准規格 02-01-12.pdf
  9. M HTH A277 框架標准規格 02-01-12.pdf
  10. M HTH Option Can 價格表 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);
    }

}

對我來說,問題似乎出在“\n”字符上。 每行的末尾都有一個新行,當您比較具有換行符的一行和沒有換行符的同一行時,它們是不一樣的。 我會通過回顯 fgets 中的每一行來確認這一點。 如果它們換行了,那么你就知道你得到了新的換行符。

編輯:
我會嘗試把
修剪(fgets($fh))
默認情況下它應該去掉換行符
修剪規格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM