Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Foreach&;PHP中的数组_Php_Codeigniter - Fatal编程技术网

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]