У меня есть цикл foreach, который уже извлекает все строки из таблицы базы данных MySQL, используя запрос стиля объекта базы данных в функции. Эта функция захватывает все поля и устанавливает их в массив ex foreach ($blahs as $blah => $blah_data). Теперь это позволяет мне заполнить страницу полями для каждой появляющейся строки. Так что это работает.
Однако мне также нужно пойти дальше и теперь получать эти строки на основе идентификатора отношения (например, идентификатора пользователя) и диапазона дат для каждого события, а также суммировать некоторые конкретные поля, такие как hours_worked. Я имел в виду наличие другого foreach внутри этого foreach, выполняющего запрос, который передает переменные диапазона дат и user_id в другую функцию.
Что происходит сейчас, так это то, что он просто извлекает первое вхождение строки и его поля hours_worked и выводит его как общее количество. Как заставить php перебирать строки отдельного пользователя на основе user_id и суммировать определенное поле для вывода?
Например, user_id 1 имеет 4 строки данных, и каждый массив строк имеет значения 1,4,9,2 (в часах на строку) user_id 2 имеет 8 строк данных, и каждый массив строк имеет значения 4,2,4,4. ,1,1,4,8. Вместо того, чтобы просто показывать «1» для пользователя 1. Или «4» для пользователя 2. Мне нужно, чтобы строки hours_worked пользователя 1 составляли 16, а строки hours_worked пользователя 2 - 28.
Как мне это сделать в цикле foreach, который уже запущен, чтобы получить эти данные?
Или я все неправильно делаю?
Я забыл упомянуть, что выходные данные форматируются в сетку данных для распечатки ежемесячного отчета. Но также и то, что около 80% этого — устаревший код злодеяний из места хуже, чем ад. Итак, поскольку они не хотят это менять, мне приходится обойти все это, и мне потребуется целая вечность, чтобы действительно детализировать сценарий здесь.
Во всяком случае, вот фрагмент кода, который дает общее представление о том, что я пытаюсь сделать. Главное, что следует отметить, это то, что входящие данные уже разбиты и назначены переменным с тем же именем, что и входящие поля. $user_id — это «user_id», а $created_date — «created_date».
Я сталкиваюсь с двумя проблемами: 1. кажется, что он не работает до тех пор, пока внешний foreach не запустится хотя бы один раз, поэтому в первой строке отсутствуют некоторые данные, которые обычно поступают из того, что, надеюсь, будет, например, общим количеством отработанных часов. И 2, похоже, загружается только первая строка каждого вхождения, поэтому я получаю только первое значение «hours_worked», а не общую сумму.
$users = Users::getAllUsers();
foreach ($users as $user => $find_user)
{
$user_data = $find_user['user_obj']; //this is so all users can be listed on the datagrid at all times rather than only show up if date range/user_id matches. I have the query function assigning variables to the array items. (ex. $name prints the name at this point if I call it in the html table)
$tech_data = Maintenance::getTechDataByDateRangeAndUser($month, $year, $techs->uid ); //unlike the above that gets all, this one gets data by type "techs" in the query and then by specific user_id within a month year date range.
//all I want to do at this point is tally the 'hworked' field (pre-assigned as $hworked in the query function) for all rows occurring for each tech.
foreach ($tech_data as $data => $find_tech_data)
{
$worked_hours_total = 0;
$tech_occurrence = $find_tech_data['hused'];
$tech_occurrence_hours = $tech_occurrence;
$worked_hours_total += doubleval($tech_occurrence_hours);
}
$tech_hours = $worked_hours_total;
}
?>