Foreach& PHP中的数组

时间:2011-01-04 21:35:20

标签: 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) {
            $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项目!

3 个答案:

答案 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]