比较两个数组并获得所有 key=>value 的总和,其中 key 在另一个数组中

分享于2022年07月17日 arrays php 问答
【问题标题】:比较两个数组并获得所有 key=>value 的总和,其中 key 在另一个数组中(Comparing two arrays and get the sum of all key=>value where key is in another array)
【发布时间】:2022-01-25 06:55:37
【问题描述】:

我有数组 array1

   array:5 [
  0 => array:1 [
    2 => array:2 [
      "type" => 1
      "score" => 10
    ]
  ]
  1 => array:1 [
    2 => array:2 [
      "type" => 2
      "score" => 5
    ]
  ]
  2 => array:1 [
    2 => array:2 [
      "type" => 3
      "score" => 4
    ]
  ]
  3 => array:1 [
    2 => array:2 [
      "type" => 4
      "score" => 60
    ]
  ]
  4 => array:1 [
    1 => array:2 [
      "type" => 1
      "score" => 5
    ]
  ]
]

我有第二个 array2 ,它是一维的

array:2 [  0 => 2, 1 => 1]

我想得到 array1 中所有得分值的总和,其中 array1.key = array2.val 将导致:

array:5 [
  0 => array:1 [
    2 => array:2 [
      "score" => 79
    ]
  1 => array:2 [
    1 => array:2 [
      "score" => 5
     ]
    ]
]

这是我尝试过的

// getResult (result,remarks,psychomotor) based on periodid
    $result = Result::join('subject__class_groups', 'results.subjectid', 'subject__class_groups.id')
    ->join('term__session__years', 'results.academic_periodid', 'term__session__years.id')
    ->join('result_types', 'results.restult_typeid', 'result_types.id')
    ->join('terms', 'term__session__years.termid', 'terms.id')
    ->join('academic_sessions', 'term__session__years.sessionid', 'academic_sessions.id')
    ->join('academic_years', 'term__session__years.yearid', 'academic_years.id')
    ->join('subjects', 'subject__class_groups.subjectid', 'subjects.id')
    ->join('class_groups', 'subject__class_groups.classgroupid', 'class_groups.id')
    ->where('results.studentid', $studentid)
    ->where('results.academic_periodid', $periodid)->get();

    $allSubjects = [2,1];
    $subs = [];
    foreach($result as $res){
        // solve for everysubjectid
        $subject = array_push($allSubjects, $res->subjectid);
        $returnValue = array_unique($allSubjects);

            $getScores = array_push($subs, [$res->subjectid=>[
                    'type'=>$res->restult_typeid,
                    'score'=>$res->score_obtained,
            ]]);


    }
    $check = array_intersect_key($returnValue, $subs);

        dd($check);

我被困在这里,因为我不知道该怎么做

所以我会感谢一些帮助...季节的赞美 谢谢你的期待

  • 好的。那么,你尝试过什么?你被困在哪里了?我们将帮助您解决实际问题,但这不是免费的“写我的代码”服务。见 How to Ask
  • @ADyson 我已经编辑了问题并添加了我所做的事情
  • array1 是一个二维数组。您应该将哪个维度的键与 array2 中的值进行比较?
  • 您在 array1[0] 中有重复的键 2
  • 第一个键是索引,我想将它与键 2 和 1 @Barma 进行比较

【解决方案1】:

试试这个:

foreach( $array1 as $array1x ){
    $key=key($array1x);
    if( in_array($key, $array2) ){
        $this_score = $array1x[$key]['score'];
        $cum_score = isset($newarray[$key]['score']) ? $newarray[$key]['score'] : 0;
        $newarray[$key]['score'] = $cum_score + $this_score;
    }
}
print_r($newarray);

演示: https://3v4l.org/iKU8j