excelSheetNoTypes[$typeIndex]; if(empty($data[0])){ return $rowData; } switch ($type){ case 'judge': if(count($data) != 3){ return false; } if(!in_array($data[1],["错误","正确","错","对"])){ return false; } $rowData = $this->parseJudge($data); break; case 'single': if(count($data) < 13){ return false; } //判断是不是字母 if(!$data[11] || strlen($data[11]) != 1 || !ctype_alpha($data[11])){ return false; } $rowData = $this->parseSingle($data); break; case 'multiple': if(count($data) < 13){ return false; } if(!$data[11] || strlen($data[11]) > 10 || !ctype_alpha($data[11])){ return false; } $rowData = $this->parseMultiple($data); break; case 'indefinite': if(count($data) < 13){ return false; } if(!$data[11] || strlen($data[11]) > 10 || !ctype_alpha($data[11])){ return false; } $rowData = $this->parseMultiple($data, 'indefinite'); break; case 'fillblank': if(count($data) != 3){ return false; } $rowData = $this->parseFillblank($data); break; case 'essay': if(count($data) != 3){ return false; } $rowData = $this->parseEssay($data); break; } return $rowData; } /** * 格式化单选题 * @param $data * @return array|false */ public function parseSingle($data){ $rowData = [ 'type'=>'single', 'question'=>$data[0], 'option'=>[], 'answer'=>0, 'analysis'=>$data[12] ]; foreach($data as $index => $option){ if($index > 0 && $index < 11){ if(!$option){ break; } if($option instanceof \PhpOffice\PhpSpreadsheet\RichText\RichText){ $option = $option->getPlainText(); } $rowData['option'][] = $option; } } $answer = ord($data[11]) - 65; if($answer < 0 || ($answer > count($rowData['option']) - 1)){ return false; } $rowData['option'] = json_encode($rowData['option'],true); $rowData['answer'] = $answer; return $rowData; } /** * 解析判断题 * @param $data * @return array */ public function parseJudge($data){ $rowData = [ 'type'=>'judge', 'question'=>$data[0], 'option'=>json_encode([]), 'answer'=>'', 'analysis'=>$data[2] ]; $rowData['answer'] = 1; if(in_array($data[1],["对","正确"])){ $rowData['answer'] = 0; } return $rowData; } /** * 解析多选题 * @param $data * @return array|false */ public function parseMultiple($data, $type = 'multiple'){ $rowData = [ 'type'=>$type, 'question'=>$data[0], 'option'=>[], 'answer'=>'', 'analysis'=>$data[12] ]; foreach($data as $index => $option){ if($index > 0 && $index < 11){ if(!$option){ break; } if($option instanceof \PhpOffice\PhpSpreadsheet\RichText\RichText){ $option = $option->getPlainText(); } $rowData['option'][] = $option; } } $answer = []; foreach (str_split($data[11]) as $item){ $item = ord($item) - 65; if($item < 0 || $item > (count($rowData['option']) -1 )){ return false; } $answer[] = $item; } $rowData['option'] = json_encode($rowData['option'],true); if(count($answer) < 2 || count($answer) > 10){ return false; } $rowData['answer'] = implode(",",$answer); return $rowData; } /** * 解析不定项选择题 * @param $data * @return array|false */ public function parseIndefinite($data){ return $this->parseMultiple($data, 'indefinite'); } /** * 解析填空题 * 格式:题目、各空格答案(空格用"|"分隔,备选答案用","分隔)、解析 * @param $data * @return array */ public function parseFillblank($data){ $answers = []; $blanks = explode('|', $data[1]); foreach($blanks as $blank){ $answers[] = explode(',', $blank); } return [ 'type'=>'fillblank', 'question'=>$data[0], 'option'=>json_encode([]), 'answer'=>json_encode($answers), 'analysis'=>$data[2] ]; } /** * 解析问答题 * 格式:题目、参考答案、解析 * @param $data * @return array */ public function parseEssay($data){ return [ 'type'=>'essay', 'question'=>$data[0], 'option'=>json_encode([]), 'answer'=>$data[1], 'analysis'=>$data[2] ]; } }