Найти сумму значений всех элементов, которые находятся в ключе в массиве php
Вот допустим у меня есть массив президентов
$presidents = [
[
'id' => 1,
'name' => 'Теодор',
'surname' => 'Рузвельт',
'year_leader' => '14.09.1901',
'year_left' => '04.03.1909',
'party' => 'Республиканец',
'leader_days' => 2728,
'vice_president' => 'Чарльз Фэрбенкс',
],
[
'id' => 2,
'name' => 'Уильям',
'surname' => 'Тафт',
'year_leader' => '04.03.1909',
'year_left' => '04.03.1913',
'party' => 'Республиканец',
'leader_days' => 1461,
'vice_president' => 'Джеймс Шерман',
]];
и там их ещё много у меня.... Мне нужно найти сколько всего Республиканцев существует(вывести числом нужно). Я уже не знаю как делать, типо допустим если я через foreach делаю или даже без него с помощью там $res = array_search('Республиканец', $presidents), а потом я это через count($res), через array_sum($res) делаю и мне постоянно подчёркивает переменную в count/array_sum, и пишет Expected type 'Countable|array'. Found 'int|string|false'. Пробовал через $found array_column($presidents, 'Республиканец') и потом in_array($found), но при подсчёте уже пишет, что boolean нельзя посчитать. Вот как через цикл делал
foreach($presidents as $key => $values){
//$found_res = array_column($presidents, 'Республиканец');
$values = array_search('Республиканец', $values);
$sum_res = count($values);
echo "Количество республиканцев = $sum_res";
}
В этом случае выводилась та ошибка Expected type 'Countable|array' в переменной $sum_res на $values и если sum заменить на array_sum то пишет ту же ошибку. А в других случаях я писал то же самое только без цикла, просто потом подумал, что может он перебрать весь массив без цикла не может и поставил его Что я не так делаю?
Ответы (1 шт):
$presidents = [
[
'id' => 1,
'name' => 'Теодор',
'surname' => 'Рузвельт',
'year_leader' => '14.09.1901',
'year_left' => '04.03.1909',
'party' => 'Республиканец',
'leader_days' => 2728,
'vice_president' => 'Чарльз Фэрбенкс',
],
[
'id' => 2,
'name' => 'Уильям',
'surname' => 'Тафт',
'year_leader' => '04.03.1909',
'year_left' => '04.03.1913',
'party' => 'Республиканец',
'leader_days' => 1461,
'vice_president' => 'Джеймс Шерман',
]];
$n_o_f = 0;
foreach($presidents as $values){//перебираем внутренние массивы
//если в массиве ключ 'party' равен 'Республиканец'
if($values['party'] == 'Республиканец') {
$n_o_f++;//то + 1 к переменной
}
}
echo "Республиканцев аж {$n_o_f}";//выводить нужно обязательно после цикла