2011-12-15 21 views
0

我一直在尋找這個答案,但似乎沒有任何實際上幫助我的具體情況。我試圖發佈單詞列表,然後刪除來自表單的重複數據(單詞)。從POST數組中刪除重複的數據

出於某種原因,我似乎無法讓array_unique工作。 PHP不斷給我錯誤,說我的發佈數組是一個字符串。但如果我嘗試使用爆炸,它說我正在使用一個數組。現在非常困惑,非常沮喪。

我的代碼很簡單:

if(!empty($_POST['keywords'])) 
{ 
    $posted = $_POST['keywords']; 

    $posted = array_unique($posted); 

    echo $posted; 
} 

我不一定要找一個確切的答案,但一些指導,所以我可以更好地瞭解我在做什麼錯在這裏。

形式:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
    <p> 
     <textarea name="keywords" rows="20" columns="120"></textarea> 
    </p> 

    <p> 
     <input type="submit" name="submit" /> 
    </p> 
</form> 

回答

0

首先考慮拆分空格的關鍵字參數,然後尋找獨特的價值觀:

$posted = array_unique(explode(' ', str_replace("\n", ' ', $posted))); 
+0

...此外,echo'ing結果公佈時,變量$是一個數組,所以審查其價值一會「回聲的print_r($張貼,真)」(或者可能只是'print_r($ posted)' – Nathan 2011-12-15 02:12:18

+0

嗨Nathan,我試過了,我得到以下內容:Array([0] => test test)...它就像仍然將它作爲字符串調用。 – 714sooner 2011-12-15 02:16:17

+0

我想象一下textarea的值包含一個新行 - 嘗試這個修訂版,它首先將換行符轉換爲空格 – Nathan 2011-12-15 02:23:32

0

也許你應該考慮使用array_filter

這樣,你可以定義您自己的回調函數,以便在您的移除中獲得最大的嚴謹性...

http://php.net/manual/en/function.array-filter.php

另外:你有沒有嘗試搞亂array_unique標誌?

http://php.net/manual/en/function.array-unique.php

0

您的關鍵字表單域設置爲一個文本,這樣當您發佈,你發佈的字符串。試試這個:

$posted = $_POST['keywords']; 

$postedKeywords = explode(' ', $posted); 

$posted = array_unique($postedKeywords); 
0

以前的答案是偉大的,但自言被輸入到一個文本框,分隔符將是不可預測的。考慮使用正則表達式來代替:

preg_match_all('/([^\s]+)/', $_POST['keywords'], $matches); 
$unique_words = array_unique($matches[0]);