我試圖創建一個「GetCurrentLevel」方法,它將一個點值作爲輸入並返回對應的「級別」。我將Level => Points映射存儲在一個數組中,但是當我使用它作爲一個foreach循環時,數組指針不會在邏輯上移動。我添加了用於調試的回顯語句。這裏是我的類定義:PHP數組指針瘋狂
class Levels extends Model
{
protected $_map = array (
'None' => 0,
'Bronze' => 50,
'Silver' => 200,
'Gold' => 500
);
public function __construct()
{
parent::__construct();
}
public function GetCurrentLevel($points)
{
foreach ($this->_map as $name => $threshold)
{
echo "Level Name: $name<br/>";
echo "Level Threshold: $threshold<br/>";
echo "Current Level: " . key($this->_map) . "<br/>";
echo "Current Threshold: " . current($this->_map) . "<br/>";
if ($points < $threshold) /* Threshold is now above the points, so need to go back one level */
{
$previousThreshold = prev($this->_map);
echo "Previous Threshold: $previousThreshold<br/>";
echo "Final Level: " . key($this->_map) . "<br/>";
return key($this->_map);
}
echo "Go to next level <br/>";
}
}
}
這裏是我所看到的,當我打電話GetCurrentLevel(60)
:
級別名稱:無
級別閾值:0
當前等級:青銅//貌似的foreach立即移動陣列指針
當前閾值:50
轉到下一級
級別名稱:青銅色
等級閾值:50
當前等級:青銅// WTF?爲什麼數組指針沒有移動?
電流閾值:50
進入一個新的水平
級別名稱:銀
級別閾值:200
當前等級:青銅// * WTF?爲什麼數組指針沒有移動? * //
電流閾值:50
上閾值:0
最後一級:無
但「最終級別」應該是「青銅」,因爲60點是需要一個青銅的50點以上獎牌,但低於銀牌所需的200分。
對不起,很長的文章。謝謝你的幫助!
感謝。我只記得最後一個價值,它是一個更清潔(和工作!)。 – JMan 2010-05-29 05:25:15
請注意,手冊的引用部分最近已被重寫。 – Gordon 2011-11-24 23:30:14