我有一个类似于以下
的数组$levels = array(P, P, F, F, P)
P是PASS,F是FAIL。
有五个级别,由数组索引表示。
我必须使用以下规则来确定等级。
规则:
- 必须传递当前级别才能移动到下一级。
- 最低通过级别应视为实际级别。
醇>
在上面的例子中。实际级别应计算为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;
}
}
答案 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;