2010-11-18 62 views
2

嗨可以說我已經有了這個數組:您在PHP數組重複的元素(如果不爲空)

$check_post = array(

$_POST["a_post"], 
$_POST["b_post"], 
$_POST["c_post"], 
$_POST["d_post"], 
$_POST["e_post"], 
$_POST["f_post"], 
$_POST["g_post"], 
$_POST["h_post"], 
$_POST["i_post"] 

); 

我要檢查是否重複這個陣列中的任何元素,所以我得到了最好的是這樣的:

if (count(array_unique($check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 

除外如果不止一個textarea的留空(這是允許的)事實的正常工作它給了我假。

我想是不考慮數組的空值的(count(array_unique())

BTW我試圖與empty()array_values($check_post)但我不能繞過它。

在此先感謝!請要求澄清。

回答

8

從比較中刪除所有的空值,您可以添加array_diff()

if (count(array_unique(array_diff($check_post,array("")))) < count(array_diff($check_post,array("")))) 
+0

I'll試試看!謝謝!! – Trufa 2010-11-18 20:05:21

+0

我認爲OP需要清空來貢獻左邊的數量,但不是正確的 – 2010-11-18 20:07:17

+0

然後當有空值時,他總是會得到「重複」。我不認爲這是他想要的。 – AndreKR 2010-11-18 20:09:02

1
if (count(array_unique(array_filter(function(x) {return !empty(x)}, $check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 
2

那麼你擁有它是好的,但正如你所說,你需要刪除空的方式條目第一。

$non_empty_check_post = array_filter($check_post, create_function('$item', 'return !empty($item);'); 

if (count(array_unique($non_empty_check_post)) < count($non_empty_check_post)) { 
    echo "Duplicate"; 
} else { 
    echo "NO Duplicate"; 
} 
+2

+1。但是當你想刪除空格時(或者評估爲false的條目),沒有必要爲'array_filter'提供一個回調函數。Manual「如果沒有提供回調,所有輸入等於FALSE的條目將被刪除。 「:) – netcoder 2010-11-18 20:19:43

+0

@netcoder非常真實! array_filter($ check_post)就足夠了。 – Orbling 2010-11-18 20:21:27

2

過濾掉你的陣列空白:

function no_blanks($val) { 
    // Do not use empty() here if you don't consider the string "0" as blank 
    return trim($val) !== ''; 
} 

$check_post = array_filter($check_post, 'no_blanks'); 

if (count(array_unique($check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 
+0

+1。但是當你想刪除空格(或者賦值爲「false」的條目)時,不需要爲'array_filter'提供一個回調函數。手冊上說:「如果沒有提供回調,輸入的所有輸入等於FALSE將被刪除。」 :) – netcoder 2010-11-18 20:20:11

+0

@netcoder:我的回調函數只對空字符串進行嚴格檢查,因爲包含數字零的字符串也會被'array_filter()'清除,這可能違背了OP的意圖。我在前面發佈的另一個答案中使用了'array_filter()',但是:) – BoltClock 2010-11-18 20:22:37

+0

啊,我看到你在這裏做了什麼。說得通! – netcoder 2010-11-18 20:24:44