获取PHP数组中不同值的数量

时间:2015-02-15 19:19:40

标签: php arrays

我需要知道数组中不同值的数量。例如,如果它包含(5,5,5)那么我应该得到1.如果它包含(4,4,2,2)我应该得到2. If(5,5,5,5,2,2,1) ,5)然后3。

是否有可以直接在PHP中实现的功能?

3 个答案:

答案 0 :(得分:2)

echo count(array_unique($arr));

你可以使用array_unique返回数组的唯一元素(结果也是数组类型),然后count返回结果

答案 1 :(得分:1)

实现这一目标的两种简单方法:

  • $diff_count = count(array_unique($input_arr));
  • $diff_count = count(array_flip($input_arr));< - 推荐(效果)

array_unique()

从数组中删除重复值 - 您可以添加adittional标志,例如:

  • SORT_REGULAR - 正常比较项目(不要更改类型)
  • SORT_NUMERIC - 以数字方式比较项目
  • SORT_STRING - 将项目比较为字符串
  • SORT_LOCALE_STRING - 根据当前区域设置将项目比较为字符串。

<强> array_flip()

将所有键及其关联值交换到数组中 - 这样就会覆盖重复的键,并获得一个最终数组,其中唯一值为键。

将其翻转两次将导致数组具有唯一值,并且原始输入数组中的键最高。

更多阅读

<强>基准

由于array_flip仅使用O(n)更快 - 使用10,000个数字的数组作为输入:

  • array_unique + count:~28.615 ms。
  • array_flip + count:~0.5012 ms。 (的赢家

答案 2 :(得分:0)

  

是否有可以直接在PHP中实现的功能?

最接近的是array_unique(),但这是一个简单的功能,可以实现您的目标:

$arr = array(5,5,5,5,2,2,1,5);

function array_diff_values( $array ) {
    return count( array_unique($array) );
}

$count = array_diff_values( $arr );

$count的结果为3