Сумма одинаковых идентификаторов в массиве объекта с использованием php

#php

#php

Вопрос:

Я хочу добавить given_points из обоих массивов объекта и показать в одном массиве объекта с помощью student_id bcoz, что в обоих массивах объекта student_id является уникальным.

 Array
(
    [0] => stdClass Object
        (
            [student_id] => 91
            [given_points] => 8
            [bonus_points] => 2
        )

    [1] => stdClass Object
        (
            [student_id] => 91
            [given_points] => 6
            [bonus_points] => 1
        )

)
Array
(
    [0] => stdClass Object
        (
            [student_id] => 95
            [given_points] => 9
            [bonus_points] => 1
        )

    [1] => stdClass Object
        (
            [student_id] => 95
            [given_points] => 9
            [bonus_points] => 1
        )

)
  

Комментарии:

1. Вы пробовали зацикливать массив? Можете ли вы показать код, который вы пробовали? Каков ожидаемый результат?

2. $newarray = array(); foreach($arr как $ar) { foreach($ar как $k => $v) { if(array_key_exists($v, $newarray)) $newarray[$v][‘given_points’] = $newarray[$v][‘given_points’] $ar[‘given_points’]; иначе, если ($k == ‘student_id’) $ newarray[$v] = $ar; } } print_r($newarray);

3. Можете ли вы показать ожидаемый результат?

4. у вас эти массивы разделены?

5. @AmodKumar , проверьте мой ответ, если вы хотите суммировать student_id и given_points .

Ответ №1:

 $sum = 0;
foreach($array as $key => $value)
{
 sum =$array[$key]['given_points'];

}

echo $sum //prints sum
  

Комментарии:

1. Что, если в массиве больше одного студента?

2. Вы выполняете цикл foreach, но используете как цикл for. $array[$key]['given_points']; совпадает с $value['given_points'];

3. Вышеупомянутое решение не работает, пожалуйста, порекомендуйте что-нибудь еще

4. Есть массив ниже Array ( [0] => Объект stdClass ( [student_id] => 91 [given_points] => 8 [bonus_points] => 2 )[1] => Объект stdClass ( [student_id] => 91 [given_points] => 6 [bonus_points] => 1)) Массив ( [0] => Объект stdClass ( [student_id] => 95 [given_points] => 9 [bonus_points] => 1) [1] => Объект stdClass ( [student_id] => 95 [given_points] => 9 [bonus_points] => 1) ) для student_id = 91 я должен показать как сумму given_points, а также то же самое для student_id = 95

5. пожалуйста, проверьте вышеуказанную проблему и порекомендуйте какое-либо решение для того же

Ответ №2:

 $sum_points = 0;
$sum_student_id=0;
foreach($array as $key=>$value){
  if(isset($value->given_points))
     $sum_points  = $value->given_points;
  if(isset($value->student_id))
     $sum_student_id  = $value->student_id;
}
echo $sum_points;
echo $sum_student_id;
  

поскольку это массив stdClass , используйте -> вместо скобок
[»]

Есть другой способ: (PHP >= 5.5)

 $sum_points = array_sum(array_column($array, 'given_points'));
$sum_student_ids = array_sum(array_column($array, 'student_id'));
  

Ответ №3:

 $array = [
    0 => ['student_id' => 91,
        'given_points' => 8,
        'bonus_points' => 2
    ],
    1 => ['student_id' => 91,
        'given_points' => 8,
        'bonus_points' => 2
    ],
    2 => ['student_id' => 92,
        'given_points' => 8,
        'bonus_points' => 2
    ],
    3 => ['student_id' => 93,
        'given_points' => 8,
        'bonus_points' => 2
    ]
];


foreach ($array as $row) {
    if (isset($newArray[$row['student_id']])) {
        $newArray[$row['student_id']] = $newArray[$row['student_id']]   $row['given_points'];
    } else {
        $newArray[$row['student_id']] = $row['given_points'];
    }
}

print_r($newArray);
  

Вы можете попробовать что-то вроде приведенного выше кода. В принципе, поскольку student_id является уникальным идентификатором вашей таблицы, и вы хотите, чтобы ваша логика была реализована на основе этого, сделайте это своим новым ключевым полем массива.

Приведенный выше код будет обрабатывать столько записей, сколько у вас есть, и выводимый массив будет выглядеть следующим образом:

 Array
(
    [91] => 16
    [92] => 8
    [93] => 8
)
  

Добавлено 2 пользователя с идентификатором 91, а остальные были уникальными пользователями в отдельных полях массива.

Комментарии:

1. Привет, спасибо за ответ, но приведенный выше код не работает, пожалуйста, порекомендуйте что-нибудь еще

2. Это не работает, потому что я использую массив в качестве примера, и у вас есть объекты. Просто получите доступ к своим значениям как к объекту, это незначительное изменение.