如果所有输入元素的频率相同,则设置默认输出值

Set default output value if frequency of all input elements is the same

大家好,我几乎不需要在这里问,因为搜索总能找到我正在寻找的答案,但这次我只是不知道要搜索什么。

以下代码按预期工作并显示所需结果。

注意:永远只能有3个结果,即"Average"、"Above average"或"Below average";示例:

$test1 = 'Average';
$test2 = 'Above average';
$test3 = 'Average';

$mystuff = array($test1, $test2, $test3);
$result = array_count_values($mystuff);
asort($result);
end($result);
$answer = key($result);
echo 'Averaging : ' . $answer;

工作示例:

输入:$test1='Average'$test2='Above average'$test3='Average'

预期输出:Averaging : Average (这是正确的,因为它是数组中出现频率最高的。)

问题是,当所有三个 $test 变量都不同时:

   $test1 = 'Above average';
   $test2 = 'Below average';
   $test3 = 'Average';

现在,$answer = Above average(即数组中的第一次出现)。

不过我想在没有"frequent occurrence"的时候设置一个默认值。

我想要的是这个:

如果所有三个变量都不同,则 $answer 必须始终显示 'Average',无论 $test1$test2$test3 值如何。

我不指望您提供我需要的代码,只是指出我要搜索的正确方向。

方法:

$result = array_count_values($mystuff);
if(sizeof($result)==1){                         // only one unique value
    $answer = key($result);                     // get lone element's value
}elseif(sizeof(array_flip($result))==1){        // if all value counts are same
    $answer = 'Average';                        // set default value
}else{
    arsort($result);                            // sort DESC
    $answer = key($result);                     // get first element's value
}
echo "Averaging : $answer";

Inputs/Outputs:

$mystuff=['Average','Below Average','Below Average'];        // Averaging : Below Average
$mystuff=['Average','Above Average','Below Average'];        // Averaging : Average
$mystuff=['Above Average','Above Average','Above Average'];  // Averaging : Above Average

只是一些注意事项,我选择了 array_flip() 而不是 array_unique(),因为它的性能更快并且提供的结果同样有用。

我可以只用两个条件编写我的方法,例如:

$result = array_count_values($mystuff);
if(sizeof($result)>1 && sizeof(array_flip($result))==1){
    $answer = 'Average';                        // set default value
}else{
    arsort($result);                            // sort DESC
    $answer = key($result);                     // get first element's value
}
echo "Averaging : $answer";

但是,这意味着 arsort() 可能会毫无意义地对单元素数组进行排序。我的意思是,这没什么大不了的——尤其是因为 arsort() 速度很快而且您的数组很小。所以,我想我的意思是,如果代码简洁对您很重要,请使用这种替代方法。