如果所有输入元素的频率相同,则设置默认输出值
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() 速度很快而且您的数组很小。所以,我想我的意思是,如果代码简洁对您很重要,请使用这种替代方法。
大家好,我几乎不需要在这里问,因为搜索总能找到我正在寻找的答案,但这次我只是不知道要搜索什么。
以下代码按预期工作并显示所需结果。
注意:永远只能有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() 速度很快而且您的数组很小。所以,我想我的意思是,如果代码简洁对您很重要,请使用这种替代方法。