我对应该如何编写此函数感到非常困惑...它基本上可以通过测试,并且适用于一个用户的值(value)观。
假设我想要以下用户的值:$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 项目!
最佳答案
首先,数组没有 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
=>$score
对的数组。
另外,根据你的框架(我猜你正在使用)调整上面的代码
关于php - PHP 中的 Foreach 和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4598676/