各ユーザーのスコアを保存しています。各スコアはランクにマッピングする必要があります。たとえば、スコア要件が 15 であるblogger
ため、スコアが 17 の人はランク付けされます。blogger
$score = 17;
$rank = array(
15 => array('profile_rank_name' => 'Blogger', 'profile_rank_image' => 'blogger.png'),
18 => array('profile_rank_name' => 'News Editor', 'profile_rank_image' => 'news_editor.png'),
23 => array('profile_rank_name' => 'Researcher', 'profile_rank_image' => 'researcher.png'),
29 => array('profile_rank_name' => 'Publications Assistant', 'profile_rank_image' => 'publications_assistant.png'),
36 => array('profile_rank_name' => 'Editorial Assistant', 'profile_rank_image' => 'editorial_assistant.png'),
45 => array('profile_rank_name' => 'Copy Editor', 'profile_rank_image' => 'copy_editor.png'),
)
この場合、スコアは 17 であるため、$rank[15] が返されます。$score が 15 以上であるためです。これについてどうすればよいでしょうか?
編集:
Uksort は、ユーザー定義の比較関数を使用して配列をキーで並べ替えます。内部でどのように機能しているかはわかりません。以下の関数で、$a と $b は何ですか?
if( ! function_exists('cmp'))
{
function cmp($a, $b)
{
return $a;
}
}
uksort($rank, "cmp");
編集: 質問があいまいであることに気付きました。午前 3 時に申し訳ありませんが、通常のように明確に考えていません。返信ありがとうございます。質問を言い換えることを考えなければなりません。
受け入れられた回答
public function get_profile_rank($score)
{
/* This method exists as an optimisation effort. Ranks are defined within the database table `author_profile_rank`.
* When we don't need application functionality on ranks and we only need to display the rank name and image we
* call this method. It saves using a table join to retrieve the rank name and image.
* http://stackoverflow.com/questions/19886351/returning-an-array-key-based-on-a-integer/19886467?noredirect=1#comment29583797_19886467
*/
if($score <= 17)
{
return array('profile_rank_name' => 'Blogger', 'profile_rank_image' => 'blogger.png');
}
elseif($score >= 45)
{
return array('profile_rank_name' => 'Copy Editor', 'profile_rank_image' => 'copy_editor.png');
}
$ranks = array(
23 => array('profile_rank_name' => 'Researcher', 'profile_rank_image' => 'researcher.png'),
29 => array('profile_rank_name' => 'Publications Assistant', 'profile_rank_image' => 'publications_assistant.png'),
36 => array('profile_rank_name' => 'Editorial Assistant', 'profile_rank_image' => 'editorial_assistant.png'),
);
$lower = function($val) use ($score)
{
if($val <= $score) return TRUE;
};
return $ranks[max(array_filter(array_keys($ranks), $lower))];
}