如何使用以下规则确定级别

时间:2016-03-27 14:03:03

标签: php arrays for-loop

我有一个类似于以下

的数组
$levels = array(P, P, F, F, P)

P是PASS,F是FAIL。

有五个级别,由数组索引表示。

我必须使用以下规则来确定等级。

  

规则:

     
      
  1. 必须传递当前级别才能移动到下一级。
  2.   
  3. 最低通过级别应视为实际级别。
  4.   

在上面的例子中。实际级别应计算为2.最后一个P将被忽略,因为之前的级别未通过。

在另一个例子中,如果数据如下所示

(P, F, P, F, P)

实际级别应为1(如果数组索引从1开始)。最低水平。

我到目前为止,但代码可能看起来有点不同。我把问题解释为一个孤立的系统。原因是为了避免一些混乱和并发症。

$result = array();
foreach($answers as $att=>$level){
    foreach($level as $key=>$val) {
        if (in_array("0", $val))
            $result[$att][$key] = 0;
        else
            $result[$att][$key] = 1;
    }}
for($i=1; $i<=6; $i++){
    for($j=1; $j<=5; $j++){
        if($result[$i][$j]==1)
            $attribute.$i = $j;
        else 
            continue;
    }
}

2 个答案:

答案 0 :(得分:1)

试试这段代码:

for($i=0; $i<count($levels); $i++){
   if($levels[$i] == "F"){
      $actual_level = $i;
      break;
   }
}

echo $actual_level;

答案 1 :(得分:1)

看看php.net有很多函数用于数组,并且有一个很好的array_search,它返回第一个匹配的键。因为这将是第一个'F',您需要减去1以获得前面的键。如果您的等级从1开始,则无需减去1。

即使数组中没有'F',这也会有效。

$levels = array('P', 'P', 'F', 'F', 'P');

$firstFailed = array_search('F', $levels);

// Instead of 5 use the var holding your max level.
echo $firstFailed ? $firstFailed : 5;