Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过添加元素,合并具有yii2模型相同键的元素_Php_Yii2 - Fatal编程技术网

Php 通过添加元素,合并具有yii2模型相同键的元素

Php 通过添加元素,合并具有yii2模型相同键的元素,php,yii2,Php,Yii2,我的控制器操作中的代码: $model = ExamsExamResults::find()->where(['student_id'=>$student_id, 'exam_short_code'=>$test])->all(); $model = ArrayHelper::map($model, 'component_name','obt_marks', 'subject_code'); json_encode($model); 给我以下输出: { "00

我的控制器操作中的代码:

$model = ExamsExamResults::find()->where(['student_id'=>$student_id, 'exam_short_code'=>$test])->all();
$model = ArrayHelper::map($model, 'component_name','obt_marks', 'subject_code');
json_encode($model);
给我以下输出:

{

    "002": {
        "Written": 15
    },
    "004": {
        "Practical": 45
    },
    "005": {
        "Practical": 45,
        "Written": 45
    }
}
我想为每个
subject\u code
添加
obt\u标记
,以获得类似于以下内容的输出

{
    "002": {
        "marks": 15
    },

    "004": {
        "marks": 45
    },
    "005": {
        "marks": 90, //45+45

    }
}

这个问题给出了一些提示,但我认为Yii社区将受益于知道如何以更Yi2的方式来做(但仍然欢迎纯php解决方案)

对于纯PHP的解决方案,您可以使用以下方法快速总结所有内容

$model = ArrayHelper::map($model, 'component_name','obt_marks', 'subject_code');
$output = [];
foreach($model as $k => $v) {
       $output[$k]['marks'] = array_sum($v);
}
输出:

Array
(
    [002] => Array
        (
            [marks] => 15
        )

    [004] => Array
        (
            [marks] => 45
        )

    [005] => Array
        (
            [marks] => 90
        )

)

我认为输出是错误的<代码>“002”应该分组在一起我编辑了这个问题,谢谢你指出!我认为,您可以通过两种方式实现这一点:1)在查询中使用适当的
->groupBy('student\u id')
->sum('mark')
。2) 使用
array\u reduce()
调用由ArrayHelper构建的
$model
,以获得有效的解决方案。yii中没有任何助手功能可以完成这项工作吗?