php中的常量数组


Array of constants in php

我是web开发的初学者。我的要求在这里有点独特。我有一组分数,从score_1到score_n。每个分数都与影响总分的因素相关联。现在我想写一个configuration.php文件为:

<?php
define("NUMBER_SCORES",4,true);
define("FACT_SCORE[1]",0.2,TRUE);
define("FACT_SCORE[2]",0.6,TRUE);
define("FACT_SCORE[3]",0.8,TRUE);
define("FACT_SCORE[4]",0.6,TRUE);
define("FACT_SCORE[5]",0.7,TRUE);
?>

然后我希望像这样迭代这些值:

<?php
function grand_total()
{
                                $agg_score=0;
                for($i=1;$i<=number_scores+1;$i++)
                $agg_score=$agg_score+ (FACT_SCORE[$i])*$scores[$i];
                return $agg_score;
}
?>

我知道这不是正确的方法,但我不知道我是如何实现这一功能的?configuration.php文件经常被更改以满足所需的要求,而许多其他页面则使用其中的数据。有其他方法可以实现这一点吗?

如果有名称奇特的常量,则需要使用constant()调用它们:

constant('FACT_SCORE[' . $i . ']')

当然,考虑到它不是一个数组,去掉方括号可能不会那么令人困惑:

define("FACT_SCORE_1",0.2,TRUE);
define("FACT_SCORE_2",0.6,TRUE);
define("FACT_SCORE_3",0.8,TRUE);
define("FACT_SCORE_4",0.6,TRUE);
define("FACT_SCORE_5",0.7,TRUE);

或者简单地使用数组;-)

为什么不把它放在数组中呢?语法更为简洁:

$FACT_SCORE = array(
    1 => 0.2,
    2 => 0.6,
    3 => 0.8,
    4 => 0.6,
    5 => 0.7
);

然后简单地说:

function grand_total()
{
    $agg_score=0;
    foreach ( $FACT_SCORE as $i => $k )
        $agg_score += $scores[$i]*$k;
    return $agg_score;
}
<?php
$fact_score = array(null, 0.2, 0.6, 0.8, 0.6, 0.7);

定义静态数组对您有用吗?

static $FACT_SCORE = array(
    0.2, 0.6, 0.8,
    0.6, 0.7
);
function grand_total()
{
    $agg_score = 0;
    for($i = 1; $i <= number_scores + 1; $i++)
        $agg_score += $FACT_SCORE[$i - 1] * $scores[$i];
    return $agg_score;
}

不能将数组分配给常量。你能做的是:

<?php
define("FACT_SCORE", serialize(array(0.2, 0.4)), TRUE);
foreach (unserialize(FACT_SCORE) as $value) {
    echo $value; // or calc some stuff
}

虽然这离美丽不远。。。

我知道这不是正确的方法,但我不知道我是如何实现这一功能的。

老实说,我不会使用常量。一个简单的数组就足够了,尽管它在整个应用程序中都是可变的。如果你仍然倾向于使用常量来实现你的目标,你可以使用这样的东西:

define("NUMBER_SCORES",5,true);
define("FACT_SCORE[1]",0.2,TRUE);
define("FACT_SCORE[2]",0.6,TRUE);
define("FACT_SCORE[3]",0.8,TRUE);
define("FACT_SCORE[4]",0.6,TRUE);
define("FACT_SCORE[5]",0.7,TRUE);
function grand_total()
{
    /** Making this up, as it's not in the example. */
    $scores = array( 0, 1, 2, 3, 4, 5 );
    $agg_score=0;
    for($i=1; $i <= NUMBER_SCORES; $i++ ) {
        $agg_score += constant( 'FACT_SCORE[' . $i . ']' ) * $scores[$i];
    }
    return $agg_score;
}

var_dump( grand_total( ) );

编辑:修改并测试了这个例子,似乎对我有效。上个例子有拼写错误,$scores没有定义。