2014-10-07 67 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