2017-05-28 22 views
2

おはようございます。ここで質問する必要はほとんどありません。検索ではいつも私が探している回答が得られますが、今回は何を検索するのか分かりません。すべての入力要素の周波数が同じ場合、デフォルトの出力値を設定します

次のコードは期待どおりに機能し、望ましい結果を示します。

注:「平均」、「平均以上」または「平均未満」の3つの結果しか表示されません。例:

$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 (それはアレイ内の最も頻繁に発生するので、これは正しい)

変数が3つすべて異なる場合は、

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

今、$answer = Above average(すなわち、配列内の最初のオカレンス)。

ただし、「頻出」がない場合は、デフォルト値を設定したいと考えています。私が持っていると思い何

はこれです:

すべての3つの変数が異なる場合は、$answerは関係なく、常に$test1または$test2または$test3値の、「平均」を示さなければなりません。

私が必要とするコードを与えることを期待していません。検索するものについて正しい方向に向けるだけです。

+0

'array_unique()'関数をチェックしてください。一意の値の数が合計値の数と同じ場合、3つのテスト変数がすべて異なることがわかります。 – rickdenhaan

+0

ありがとうございます@rickdenhaan。私はarray_unique関数を調べます。 – jamie

答えて

0

方法:

$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"; 

入力/出力:それはより速くパフォーマーであり、それは、その結果を提供するため、

$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_unique()以上array_flip()を選択しています同様に有用である。

私のようなちょうど2つの条件で私の方法を記述することができ:arsort()はsenselessly 1要素の配列をソートすることができることを意味している、しかし

$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()が高速で配列が非常に小さいためです。だから、私は、コードの簡潔さがあなたにとって重要であるならば、この代替方法を使用していると思います。

+0

ありがとう@mickmackusa。 IF ELSEステートメントは私には意味があり、あなたの答えは明らかに私が探していた正確な結果をもたらしました。再度、感謝します。 – jamie

+0

私はまもなく話したようです。 3つの$テスト値がすべて異なる場合、デフォルト値は「平均」に設定されます。これは正しいです。 – jamie

+0

$ mystuff = ['Above Average'、 'Above Average'、 'Average']のときも正しくなります。 //平均化:平均以上 – jamie

関連する問題