繁体   English   中英

PHP数组指针疯狂

[英]PHP array pointer craziness

我正在尝试创建一个“ GetCurrentLevel”方法,该方法将一个点值作为输入并返回对应的“ Level”。 我将Level => Points映射存储在数组中,但是当我在foreach循环中使用它时,数组指针在逻辑上并没有移动。 我添加了echo语句进行调试。 这是我的课程定义:

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分。

抱歉,很长的帖子。 谢谢你的帮助!

您应该阅读foreach文档页面上的前两个注释:

注意:当foreach首次开始执行时,内部数组指针将自动重置为数组的第一个元素。 这意味着您不需要在foreach循环之前调用reset()。

注意:除非引用了数组,否则foreach将在指定数组的副本上而不是数组本身上进行操作。 foreach对数组指针有一些副作用。 不要在foreach期间或之后依赖数组指针而不重置它。

我相信以数组作为引用将解决您的问题,但是记住另一个变量中的最后一个值而不是使用prev()可能更清洁

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM