private $ans = [];
public function test(){
$data=DB::table('test')->whereNotNull('score')->get()->toArray();
$data = array_column($data,'score');
$total_grade = 100;
$exam_number = 35;
sort($data);
$this->backtrack($data,$total_grade,0,[]);
$list = collect($this->ans);
}
$score_combination = collect($combination)->random();
$random_data = ExamQuestionBank::whereIn('score',$score_combination)->inRandomOrder()->get()->toArray();
$return_data = [];
$del = [];
$combination_count = count($score_combination);
foreach ($random_data as $key=>$val){
foreach ($score_combination as $k => $v){
if ($val['score'] == $v && !in_array($key,$del)){
$return_data[] = $val;
unset($score_combination[$k]);
$del[] = $key;
}
}
if (count($return_data) == $combination_count){
break;
}
return $return_data;
}
public function backtrack($candidates,$target,$start,$list){
if($target < 0){
$this->create([],'总分小于0!',201);
}else if($target == 0){
$this->ans[] = $list;
}else{
for($i=$start;$i<count($candidates) && ($target-$candidates[$i])>=0;$i++){
if($i>$start && $candidates[$i] == $candidates[$i-1]){
continue;
}
array_push($list,$candidates[$i]);
$this->backtrack($candidates,$target-$candidates[$i],$i+1,$list);
array_pop($list);
}
}
}