php中的常量数组

php中的常量数组,php,html,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[

我是网络开发的新手。我的要求在这里有点独特。我有一组分数,分数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
文件以满足所需的要求。有没有其他方法可以实现这一点?

为什么不把它放在一个数组中呢?语法更清晰:

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

定义静态数组对您有用吗

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;
}
static$FACT\u SCORE=数组(
0.2, 0.6, 0.8,
0.6, 0.7
);
函数grand_total()
{
$agg_得分=0;
对于($i=1;$i)
我知道这不是正确的方法,但我不知道如何实现这一功能

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

<?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;
}
?>
define(“数字分数”,5,真);
定义(“事实分数[1]”,0.2,真);
定义(“事实分数[2]”,0.6,真);
定义(“事实分数[3]”,0.8,真);
定义(“事实分数[4]”,0.6,真);
定义(“事实分数[5]”,0.7,正确);
函数grand_total()
{
/**弥补这一点,因为它不在示例中*/
$scores=数组(0,1,2,3,4,5);
$agg_得分=0;

对于($i=1;$i您不能将数组分配给常量。您可以做的是:

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

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

如果您有具有奇特名称的常量,则需要使用来调用它们:

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

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

假设$scores[$i]等等。有正确的值。我跳过了很多计算这些值的代码。你不能定义一个静态数组吗?我不想要数组…数组在整个应用程序中都是可变的,我不想要。我需要它是常量。有可能在另一个文件(包括此文件)中修改此数组的值是的???@sasidhar-是的,数组不是只读的。如果你想防止这种情况发生,你可以编写一个类,将这个数组包装成一个只读的
迭代器
/
ArrayAccess
。或者可能只是一个返回这个数组的函数,所以你总是在使用它的副本。我想阿尔瓦罗·G·维卡里奥的答案在一个简单的例子中就起到了作用简单的manner@sasidhar-嗯,我有点认为数组方法更简单。只需注意-我没有遇到配置设置在运行时会意外更改的问题,即使它是可修改的。而且,如果你说它经常更改,那么我预计用户可能很快就会想要更好的UI来修改它ese常量和数组会容易得多。但是-按你的方式去做。值得注意的是,
static
不会阻止你修改变量。@sasidhar试试修改后的示例,它似乎对我有用。上面脚本的结果是float(9.7)。不过请注意,我同意其他海报:数组(静态或普通)应该足够了。@Berry Langerak yeah常量()的使用我更喜欢使用常量,因为我希望它们是只读的。但我同意还有其他方法。但我认为这很简单。@sasidhar-提醒你,如果你真的想…@Vilx+1,但我想这不是偶然的。我们是一群人在一起工作。所以我不希望他们中的任何人意外地更新这些值。@sasidhar-正如我所说的,这并没有发生在我身上。因此,我的观点是,这是一种过度的杀伤力。但是,再一次,做你喜欢做的事。这种方法同样有效。
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);