内容:
前段时间遇到一个数组分离的问题,这里做详细记录。
1.前端会传一个数组:$think,格式如下,里面的数据为测试数据。
$think = [
'answer' => [
[
'name' => '答案',
'fraction' => '正确答案标记',
'tab' => '选项标记',
'files_hash' => '72efe775659c24aa3437de1cfc6314c5'
],
[
'name' => '答案',
'fraction' => '100',//100
'tab' => '选项标记',
'files_hash' => 'f14d4fcfcace8ffd33fb8a9e28182c15'
],
],
'files_hash' => [
'72efe775659c24aa3437de1cfc6314c5',
'f14d4fcfcace8ffd33fb8a9e28182c15',
'5b84380d01c49e077dd9292abf82b633',
'82b0b3da9708e62092d44efbef4a64b3'
],
'upload_files' => [
[
'file' => '11',//得到的file对象,request()->file()
'name' => '文件上传的名字1',
'hash' => '72efe775659c24aa3437de1cfc6314c5',
'summary' => '文件描述1'
],
[
'file' => '22',//得到的file对象,request()->file()
'name' => '文件上传的名字2',
'hash' => 'f14d4fcfcace8ffd33fb8a9e28182c15',
'summary' => '文件描述2'
],
[
'file' => '33',//得到的file对象,request()->file()
'name' => '文件上传的名字2',
'hash' => '5b84380d01c49e077dd9292abf82b633',
'summary' => '文件描述2'
],
[
'file' => '44',//得到的file对象,request()->file()
'name' => '文件上传的名字2',
'hash' => '82b0b3da9708e62092d44efbef4a64b3',
'summary' => '文件描述2'
],
],
];
2.将上述代码中upload_files的4个数据保存到数据表中并返回一个数组,其格式为'hash' => 'id'【这里id为新增的数据的随机字符串】
if ($think['files_hash'] || $think['upload_files']) {
$img_ids = $attachments->saveFileBatch($think['upload_files'], $think['files_hash']);//格式:hash => id
}
说明:这里的$img_ids为返回的数组,打印数据如下:
可以看出这里格式为:'hash' => 'id'
3.在$think中,这个数组包括了试题和答案的所有,而$think中的answer中的所有为答案相关,其他字段为试题加答案。
现在通过hash来循环出$img_ids中的答案id和试题id,并将多个id用“逗号”隔开组合成字符串存进数据表中。
foreach ($img_ids as $k => $v) {
$all_hash[] = $k;//所有hash
$all_ids[] = $v;//所有id
}
$k = 0;
for ($i = 0; $i < count($all_hash); $i++){
for ($j = 0; $j < count($think['answer']); $j++){
if ($all_hash[$i] == $think['answer'][$j]['files_hash']) {
//答案图片id
$answer_IMG[$k] = $img_ids[$all_hash[$i]];
$k++;
}
}
}
//试题图片id
$question_IMG = array_diff($all_ids, $answer_IMG);
//组合格式-试题图片id
$que_IMG = join(',', $question_IMG);
//组合格式-答案图片id
$ans_IMG = join(',', $answer_IMG);
这样就分离出试题和答案的id字符串。
在现在看来以前的代码写得十分臃肿,后期做了优化,这里就不提供出来了,因为业务逻辑改变了。