日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP多选题怎么弄,php多选题评分算法求指导解决方法

發(fā)布時(shí)間:2025/4/16 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP多选题怎么弄,php多选题评分算法求指导解决方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

php 多選題評(píng)分算法 求指導(dǎo)

多選題一題3分

原則是:少選給2分,多選不給分,選錯(cuò)不給分

假如:正確答案123

提交答案 123 得3分

提交答案 12,13,23,都可得2分

提交答案 1234,234,134,124 沒(méi)分

怎么實(shí)現(xiàn),還是有更好的方法

------解決方案--------------------

按你的描述,你的多選題不是用 checkbox 而是用 text 輸入的

并且備選答案不會(huì)多于9個(gè)

于是得分可寫(xiě)作

count(array_intersect(str_split($正確答案), str_split($提交答案));

就是:分別切割成數(shù)組,然后取交集

------解決方案--------------------

如果你是使用 checkbox

那么提交后得到的就是數(shù)組,與正確答案數(shù)組取交集就是了

------解決方案--------------------

$正確答案 = array(1, 2, 3);

$提交答案 = array(1, 2);

$得分 = count(array_intersect($正確答案, $提交答案));

echo $得分; //2

------解決方案--------------------

引用:$正確答案 = array(1, 2, 3);

$提交答案 = array(1, 2);

$得分 = count(array_intersect($正確答案, $提交答案));

echo $得分; //2

取交集和樓主的題目要求不符合吧,比如提交答案為數(shù)組array(1,2,4),那么交集也是(1,2),實(shí)際應(yīng)該得0分吧。

------解決方案--------------------

是的,不完全符合。

但是選 1,2,4 就不得分是不合常理的。除非 4 是反選項(xiàng),比如:都不是

如果是這樣的話,出題者就是在有意誤導(dǎo)答題者

如果非要這樣出題的話,可以這樣寫(xiě)$正確答案 = array(1, 2, 3);

$錯(cuò)誤答案 = array(4);

$提交答案 = array(1, 2, 4);

$得分 = array_intersect($錯(cuò)誤答案, $提交答案) ? 0 : count(array_intersect($正確答案, $提交答案));

echo $得分; //0

引用:引用:$正確答案 = array(1, 2, 3);

$提交答案 = array(1, 2);

$得分 = count(array_intersect($正確答案, $提交答案));

echo $得分; //2

取交集和樓主的題目要求不符合吧,比如提交答案為數(shù)組array(1,2,4),那么交集也是(1,2),實(shí)際應(yīng)該得0分吧。

……

------解決方案--------------------

交并差就可以了

答卷在前,答案在后

有差集,不給分

無(wú)交集,不給分(排除上一個(gè)后這個(gè)是考慮空白答卷的情況,如果確認(rèn)不會(huì)有白卷這句可以不用)

無(wú)差集,有交集,交集數(shù)量!=答卷,半分

無(wú)差集,有交集,交集數(shù)量=答卷,滿分(這個(gè)可以不寫(xiě)邏輯,直接用else也行,因?yàn)榕懦厦鎺追N情況剩下就是交集相等)

注意

1.上面要順序判斷,是 else if 不相容邏輯而不是 switch 可容邏輯,因?yàn)槭×艘恍┡袛鄺l件

2.答卷和答案都要確保無(wú)重復(fù)值,不然交集數(shù)量判斷會(huì)有問(wèn)題

------解決方案--------------------

可以用位運(yùn)算來(lái)計(jì)算

A:1 B:2 C:4 D:8

如何選擇AB 則為3

如何選擇ABCD 則為15

比如正確為4 則 看看選擇的結(jié)果為N跟4比

if(N==4) 3分

if 4&N==N 2分

其他 O分

------解決方案--------------------

引用:可以用位運(yùn)算來(lái)計(jì)算

A:1 B:2 C:4 D:8

如何選擇AB 則為3

如何選擇ABCD 則為15

比如正確為4 則 看看選擇的結(jié)果為N跟4比

if(N==4) 3分

if 4&N==N 2分

其他 O分

位運(yùn)算是不錯(cuò)的選擇,選擇肢<32個(gè)(因系統(tǒng)和php版本可能多至63),很方便

但更大就不太方便了

------解決方案--------------------

按照老大的思路,可以這樣做$correct = array(1, 2, 3);

$submit = array(1, 2);

$score = count(array_intersect($correct, $submit));

if($score < count($submit)){//如果多選了給0分

$score = 0;

}

echo $score; //2

------解決方案--------------------

樓主 #11 的貼圖與樓主 #2 的補(bǔ)充不符

既然是用 checkbox 提交的,提交答案就不會(huì)是 array( [0] => 12 ) 形式

而是 array( [控件名] => array( [0] => 1 [2] => 2) ) 這種形式

否則是需要拆分成數(shù)組后才能使用數(shù)組函數(shù)的

------解決方案--------------------

貼出你的表單片段,我給你詳細(xì)解釋

------解決方案--------------------

對(duì)呀,你的 name="answer66[]"

所以提交后(假定全部選中) $_POST['answer66'] 是 array(1, 2, 3, 4) 這樣的數(shù)組

此時(shí)你同樣需要把答案處理成 array(1, 2, 3) 這樣的數(shù)組,才能應(yīng)用數(shù)組函數(shù)

對(duì)于這一點(diǎn),我 #1 的回復(fù)已經(jīng)說(shuō)了

------解決方案--------------------

function fen($a,$b){ //$a答案 $b正確答案

if($a==$b){

return 3;

}

foreach ($a as $value){

if(!in_array($value, $b)){

return 0;

}

}

return 2;

}

只想到個(gè)笨方法

------解決方案--------------------

多選和少選都不給分

就用差集為空

本條技術(shù)文章來(lái)源于互聯(lián)網(wǎng),如果無(wú)意侵犯您的權(quán)益請(qǐng)點(diǎn)擊此處反饋版權(quán)投訴

本文系統(tǒng)來(lái)源:php中文網(wǎng)

總結(jié)

以上是生活随笔為你收集整理的PHP多选题怎么弄,php多选题评分算法求指导解决方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。