记录(2018年5月25日)解决的分离自定义数组元素问题

本文介绍了一种从前端接收到的复杂数组中分离出试题和答案数据的方法,通过循环和条件判断,有效地将数据按需求分类并存储,最终优化代码实现更高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容:

前段时间遇到一个数组分离的问题,这里做详细记录。

 

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字符串。

在现在看来以前的代码写得十分臃肿,后期做了优化,这里就不提供出来了,因为业务逻辑改变了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值