Foreach&;PHP中的数组
我对该如何编写这个函数感到非常困惑……它基本上是一个测试的分数,并且适用于一个用户的值 假设我需要以下用户的值:Foreach&;PHP中的数组,php,codeigniter,Php,Codeigniter,我对该如何编写这个函数感到非常困惑……它基本上是一个测试的分数,并且适用于一个用户的值 假设我需要以下用户的值:$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) {
$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){
//案例4
foreach($this->get_results_a($id,4)->row()作为$key=>$a){
如果($a>=2&&$a 4&&$a<8){
$score_a+=3;
}否则如果($a>8){
$score_a+=底价($a-8)*.5;
$score_a+=3;
}
};
返回$score_a;
}
函数get\u results\u a($id$method){
$select\u cols=数组(
1=>数组('a_1'、'a_2'、'a_4'),
2=>数组('a_6'、'a_8'、'a_11'、'a_12'、'a_14'),
3=>数组('a_3','a_10'),
4=>数组('a_5'、'a_7'、'a_9'、'a_13')
);
返回$this->db->select($select\cols[$method])
->其中_in('id',$id)
->get(“be_调查”);
}
这将返回一个分数…但是,如果我运行多个ID…它只是将所有数字相加,我认为
相反,我需要它为单个用户输出单独的分数
请注意,我是个彻头彻尾的傻瓜!因此,非常感谢生动的解释。:)
编辑
请检查我的代码…因为我应该更清楚!很抱歉
我道歉!总之,这将根据以下内容从表中选择正确的值:
是的,我的眼睛也痛!
编辑
我太匆忙了!这是一个Codeigniter项目 在
array
上没有称为row()
的方法。实际上,数组
并不是严格意义上的对象,因此它没有方法
因此,首先,去掉->row()
调用
第二,你在哪里把这些分数推到一个数组上?我看不出在你的代码中会发生什么。在
foreach
循环之前初始化一个空数组,并将$score\u b
变量推送到循环末尾的数组上。首先,数组没有行()。。只需使用foreach($array as$key=>$value)
其次,在
foreach
循环中,每次运行时$score_b都会增加其先前的值。因此,您的代码将输出所有玩家分数的总和。使用:
$score
现在将是$id
=>$score
对的数组。另外,根据您的框架(我猜您正在使用)调整上述代码。在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;
}
};
“这会返回一个分数。”不,不会。它将在第一行返回一个解析错误?为什么要使用
$this
?嘿,别让我们悬着!“基于”什么?是的,JMC。对不起,这是一个CI项目。它不起作用。。因为他在foreach
循环中增加相同的score_b
变量,因此,输出所有球员得分的总和,而不是个人得分。请查看我的编辑!对不起!:)如果这仍然是一个解决方案,您是否也会包括如何在html中输出/格式化它?再说一次,我是个十足的傻瓜!哈哈。我会的,我会的。请你解释一下你的理由好吗?(我的解决方案是您编辑的部分,而不是前半部分)。我有三个函数来完成一项任务。有更优雅的解决方案吗?我很喜欢这个外观,JMC…我会试试看!在使用+=
运算符之前,是否需要初始化$score\b[$name]
变量?如果这是问题所在,请尝试添加score_b[$name]=0代码>就在foreach的之后
$id = array(2,3,4,5);
function get_score_array($ids) {
foreach ($ids as $id) {
$scores[$id] = get_score_a($id);
}
return $scores;
}
$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]