2014-10-07 65 views
1

我想看看如果數組具有相同的值多次,例如:如何檢查是否數組有值多次

$array=array('val1','val2','val3','val1'); 

正如你所看到的,上面的陣列中,有2個x val1。 要搜索如果一個數組包含一個值,我可以用in_array做到這一點:

$search=in_array('val1',$array); 

而且由於VAL1在數組存在,它將返回true,但我需要的,如果該值被發現多次返回true。

+1

您將獲得以下陣列[array_count_values()](http://www.php.net/manual/en/function.array-count-values.php ) – 2014-10-07 11:46:57

+0

array_count_values()函數計算數組的所有值。我只想看看數組中是否有重複值。 – 2014-10-07 11:48:19

+0

RTFM:array_count_values()使用數組的值作爲鍵__和它們的頻率___作爲值返回 – 2014-10-07 11:50:09

回答

5

你可以利用的array_keys()一個不太知名的功能,該功能用於返回的數組的鍵作爲新的陣列(即,沒有值。)

它接受可選的第二個參數search,它允許您規定您只希望返回那些與您的搜索對應的值。所以:

$arr = array('one', 'two', 'one', 'three'); 
$indexes = array_keys($arr, 'one'); //array(0, 2) 
2

通過提供search_value作爲array_keys的第二個參數。該函數將僅返回包含該值的數組的鍵。

$array=array('val1','val2','val3','val1'); 
$search = array_keys($array, 'val1'); 

作爲參考,Please READ

+0

請解釋一下?你的建議爲什麼會起作用? – 2014-10-07 11:46:02

+1

@PetruLebada我已經添加了參考答案。 – 2014-10-07 11:48:30

1

這個功能應該做的伎倆:

function check_multi($testVal,$arr) { 
    foreach($arr as $curVal) { 
    $counts[$curVal]++; 
    } 
    if(isset($counts[$val]) 
    return $counts[$val]; 
    else 
    return null 
} 
2

嘗試

<?php 
$array = array('val1','val2','val3','val1'); 
$cnt = array_count_values($array); 
echo $cnt['val1']; 

https://eval.in/202593

+0

你的建議它很棒,但我有一個問題,即時搜索的價值,實際上是一個$ _POST ['val1'],我應該如何建立語法? $ cnt($ _ POST ['val1'])這很好? – 2014-10-07 12:08:53

+0

$ _POST是數組,嘗試array_count_values($ _ POST)['val1']; – Xrymz 2014-10-07 12:10:52

+0

此語法不起作用... – 2014-10-07 12:15:11

1

嘗試this

https://eval.in/202596

echo array_count_values($array)["val1"]; 

當你執行this

+0

你確定這個語法正確嗎?我在編輯器中遇到了一些語法錯誤 – 2014-10-07 11:52:48

+0

@Petru - 您使用的是哪個版本的PHP?這是數組解引用,它是在PHP 5.4.0中引入的 – 2014-10-07 11:53:16

+0

最後一個版本 – 2014-10-07 11:53:44