我对如何编写这个函数感到非常困惑......它基本上是对一个测试进行评分,并且它适用于一个用户的值。
假设我想要以下用户的值:$id = 2
...这有效!如果$id = array(2,3,4,5)
它不起作用!
function get_score_a($id){
// Case 4
foreach($this->get_results_a($id,4)->row() as $key=>$a){
if ($a >= 2 && $a <= 4) {
$score_a += 2;
} else if ($a > 4 && $a < 8) {
$score_a += 3;
} else if ($a > 8) {
$score_a += floor($a - 8) * .5;
$score_a += 3;
}
};
return $score_a;
}
function get_results_a($id, $method) {
$select_cols = array(
1 => array('a_1','a_2','a_4'),
2 => array('a_6','a_8','a_11','a_12','a_14'),
3 => array('a_3','a_10'),
4 => array('a_5','a_7','a_9','a_13')
);
return $this->db->select($select_cols[$method])
->where_in('id', $id)
->get('be_survey');
}
这会返回一个分数......但是,如果我运行多个ID ...它只是将所有数字相加,我认为......
相反,我需要这个为个人用户输出单独的分数......
请注意,我是一个总菜刀!因此,非常感谢活泼的解释。 :)
修改 请查看我的代码...因为我应该更清楚!抱歉! 我道歉! 总之,根据
从表格中选择正确的值是的,我的眼睛也受伤了! 的修改 我太仓促了!这是一个Codeigniter项目!
答案 0 :(得分:4)
首先,数组没有row()
..只需使用foreach ($array as $key=>$value)
其次,在foreach
循环内,$ score_b在每次运行时以其先前的值递增。所以,你的代码输出所有玩家分数的总和
使用方法:
foreach(array(5,5,5,6,7,78,8,7,7,6,5) as $key=>$a){
if ($a >= 0 && $a <= .5) {
$score_b[$key] += 0;
} else if ($a > .5 && $a < 2) {
$score_b[$key] += 1;
}
else if ($a > 2 && $a < 4) {
$score_b[$key] += 2;
}
else if ($a > 4) {
$score_b[$key] += floor($a - 8) * .5;
$score_b[$key] += 2;
}
};
$ score_b现在将是一系列分数。
修改强> 在代码中添加以下内容:
$id = array(2,3,4,5);
function get_score_array($ids) {
foreach ($ids as $id) {
$scores[$id] = get_score_a($id);
}
return $scores;
}
$scores
现在将成为$id
=&gt; $score
对的数组。
另外,根据你的框架调整上面的代码(我猜你正在使用)
答案 1 :(得分:2)
在row()
上没有名为array
的此类方法。事实上,array
并非严格意义上的对象,因此它没有方法。
所以,首先,摆脱->row()
调用。
其次,你将这些分数推到阵列上?我不知道你的代码中发生了什么。在foreach
循环之前初始化一个空数组,并在循环结束时将$score_b
变量推送到数组上。
答案 2 :(得分:0)
在foreach循环之外设置一个$userID
变量,如下所示:
$userScores = array(
'bobby' = > array(5,5,5,6,7,78,8,7,7,6,5),
'sue' = > array(5,5,5,6,7,78,8,7,7,6,5),
'joe' = > array(5,5,5,6,7,78,8,7,7,6,5)
);
foreach($userScores as $name => $a){
$score_b[$name] = 0; //initialize
if ($a >= 0 && $a <= .5) {
$score_b[$name] += 0;
} else if ($a > .5 && $a < 2) {
$score_b[$name] += 1;
}
else if ($a > 2 && $a < 4) {
$score_b[$name] += 2;
}
else if ($a > 4) {
$score_b[$name] += floor($a - 8) * .5;
$score_b[$name] += 2;
}
};
你的最终结果应该是(我没有做任何实际数学)
$score_b['bobby'][100]
$score_b['sue'][75]
$score_b['joe'[90]