【问题标题】:PHP check if array value is uniquePHP检查数组值是否唯一
【发布时间】:2017-07-17 03:03:02
【问题描述】:

我今天早些时候正在做一些事情,我偶然发现了这个问题。如何检查某个数组值在该数组中是否唯一?

$array = array(1, 2, 3, 3, 4, 5);

if(unique_in_array($array, 1)) //true
if(unique_in_array($array, 3)) //false

我一直在考虑使用array_search()in_array(),但它们对于查找重复项都不是很有用。我确信我可以编写这样的函数来做到这一点:

function unique_in_array($arr, $search){
    $found = 0;

    foreach($arr as $val){
        if($search == $val){
            $found++;
        }
    }

    if($found > 1){
        return true;
    } else {
        return false;
    }
}

或者另一种解决方案是像这样使用array_count_values()

$array_val_count = array_count_values($array);

if($array_val_count[$search] > 1){
    return true;
} else {
    return false;
}

但我觉得 PHP 没有内置函数(或至少是更好的方法)来执行此操作似乎很奇怪?

【问题讨论】:

    标签: php arrays unique


    【解决方案1】:

    试试这个:

    if (1 === count(array_keys($values, $value))) {
        // $value is unique in array
    }
    

    参考见:

    【讨论】:

    • 太棒了!这实际上是迄今为止最优雅的解决方案!
    • 谢谢。我会再等几分钟,但我认为这是迄今为止最好的解决方案。如果没有更好的弹出,我会接受你的回答:)
    【解决方案2】:

    你可以这样尝试-

    $array1   = array(1, 2, 3, 3, 4, 3, 3, 5);
    
    $func   = array_count_values($array1);
    $count  = $func[3];  #Pass value here
    
    echo $count;  #this will echo 4
    
    #If you pass undefined value, You should use like as below
    $count = isset($func[8])? $func[8] : 0;
    
    echo $count;  #this will echo 0, Because 8 is absent in $array1
    

    这里是array_count_values()的函数参考

    【讨论】:

    • 这不是很有帮助。您正在检查数组是否有重复项。问题是检查某个 value 是否唯一。
    • 啊!是的!我正在更新我的答案! @icecub
    • 是的,这也是我的问题。我知道它有效,但我一直在寻找像 localheinz 提供的更优雅的解决方案。不过,我会给你一个 +1 的努力。感谢您的尝试:)
    • 啊!谢谢! +1 @icecub
    • 但是在这个解决方案中,如果echo == 1,那意味着Value在数组中是唯一的。 @icecub
    【解决方案3】:

    我发现这个是为了检查数组是否有重复值

    $array = array(1, 2, 3, 3, 4, 5);
    
    if(count(array_unique($array)) != count($array)){
        // Return true Array is unique
    }
    else{
        // Return false Array is not unique
    }
    

    【讨论】:

    • 欢迎来到 StackOverflow。虽然此代码可能会解决问题,但包括解释如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。看看这里→How do I write a good answer?
    • 感谢您的尝试,但请再次阅读问题。问题是数组中的特定值是否唯一。如果整个数组具有唯一值,则不会。所以在像[0, 0, 1, 2, 2] 这样的数组中,它应该返回true 来检查1,而返回false 来检查所有其他人。 @FedericoBaù 这个问题真的很老(3 / 4 年)并且很久以前就回答了。老实说,我什至不记得问过。
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 2021-12-11
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2016-05-09
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多