php中的常量数组

时间:2011-05-31 10:39:09

标签: php html

我是网络开发的先驱。我的要求在这里有点独特。我有一组得分,得分为1到得分为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文件经常更改以满足所需要求,而许多其他页面使用其中的数据。有没有其他方法可以实现这个目标?

6 个答案:

答案 0 :(得分:2)

如果您的常量名称很复杂,则需要使用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);

或者只是使用数组; - )

答案 1 :(得分:1)

为什么不在阵列中制作它?语法更清晰:

$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;
}

答案 2 :(得分:0)

<?php
$fact_score = array(null, 0.2, 0.6, 0.8, 0.6, 0.7);

答案 3 :(得分:0)

定义静态数组会为你工作吗?

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;
}

答案 4 :(得分:0)

  

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

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

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( ) );
编辑:改变并测试了这个例子,似乎对我有用。最后一个示例有拼写错误,并且未定义$ score。

答案 5 :(得分:0)

您无法将数组分配给常量。你能做什么,将是:

<?php
define("FACT_SCORE", serialize(array(0.2, 0.4)), TRUE);

foreach (unserialize(FACT_SCORE) as $value) {
    echo $value; // or calc some stuff
}

虽然距离美丽不远......