#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. Это не работает, потому что я использую массив в качестве примера, и у вас есть объекты. Просто получите доступ к своим значениям как к объекту, это незначительное изменение.