網頁

2014年2月27日

[php] 如何取得二維陣列最大值(取得某單位最高職等職級的人員)

取得二維陣列最大值,怎麼會跟職等職級扯上關係?這就關係到職等職級的進位方式,正常來說,職務等級是採用十進位,例如:三等9級晉等後,就是四等1級,但是如果不是使用十進位的方式,要用程式來判斷最高職等,頓時還不知道怎麼處理,用幾個範例來看應該會比較容易理解。


範例一:
職等職級十進位晉等,使用下列方式,就可以簡單取得最高的等級。
<?php
//郭靖 七等5級
$level['郭靖'] = 7.5;
//黃蓉 七等9級
$level['黃蓉'] = 7.9;
//楊過 五等3級
$level['楊過'] = 5.3;

$max = max($level);

foreach ($level as $name => $lv){
 if ($max == $lv){
  echo $name;
  break;
 }
}
?>
輸出結果:
黃蓉(正確)


範例二:
假設把"黃蓉"的等級變為七等11級,採用一樣的方式取值,取得的值就會錯誤,因為7.5大於7.11,但依職等來說,七等11級比七等5級高。
<?php
//郭靖 七等5級
$level['郭靖'] = 7.5;
//黃蓉 七等11級
$level['黃蓉'] = 7.11;
//楊過 五等3級
$level['楊過'] = 5.3;

$max = max($level);

foreach ($level as $name => $lv){
 if ($max == $lv){
  echo $name;
  break;
 }
}
?>
輸出結果:
郭靖(錯誤!最高的應該是"黃蓉")


範例三;
所以如果是非十進位晉等規則,這個是候就要改使用下列這個方式,才能正確取得最高職等人員。
<?php
//郭靖 七等5級
$level['郭靖'] = array(7, 5);
//黃蓉 七等11級
$level['黃蓉'] = array(7, 11);
//楊過 五等3級
$level['楊過'] = array(5, 3);

$max = max($level);

foreach ($level as $name => $lv){
 if ($max == $lv){
  echo $name;
  break;
 }
}
?>
輸出結果:
黃蓉(正確)

注意到了嗎?運用max()函式會對陣列做遞迴比較的特性,就可以很容易的取得最高等級的人員了。