php - 如何使用 array_search 循环员工出勤以从数据对象中获取当前员工的出勤天数
问题描述
这是我的数据
{
"data": [
{
"firstname": "Amol",
"lastname": "Auti",
"emp_primary": "1",
"emp_id": "1001",
"company_name": "Maverick Solution",
"id": "1",
"in_time": "09:00:00",
"out_time": "16:00:00",
"total_time": "07:00:00.000000",
"date": "2018-08-04",
"device_id": "12:12:12:12"
},
{
"firstname": "Amol",
"lastname": "Auti",
"emp_primary": "1",
"emp_id": "1001",
"company_name": "Maverick Solution",
"id": "18",
"in_time": "09:00:00",
"out_time": "16:00:00",
"total_time": "07:00:00.000000",
"date": "2018-08-05",
"device_id": "12:12:12:12"
},
{
"firstname": "Amol",
"lastname": "Auti",
"emp_primary": "1",
"emp_id": "1001",
"company_name": "Maverick Solution",
"id": "5",
"in_time": "09:00:00",
"out_time": "12:00:00",
"total_time": "03:00:00.000000",
"date": "2018-08-06",
"device_id": "12:12:12:12"
},
{
"firstname": "Sumit",
"lastname": "Malusare",
"emp_primary": "2",
"emp_id": "1002",
"company_name": "Maverick Solution",
"id": "20",
"in_time": "09:00:00",
"out_time": "18:00:00",
"total_time": "09:00:00.000000",
"date": "2018-08-05",
"device_id": "12:12:12:12"
}
]
}
其中 emp_primary = 1 有 3 条记录,而 emp_primary 2 有 1 条记录
这是我的实际问题
public function getdaterange($start, $end, $format = 'Y-m-d') {
$start = new DateTime($start);
$end = new DateTime($end);
$invert = $start > $end;
$dates = array();
$dates[] = $start->format($format);
while ($start != $end) {
$start->modify(($invert ? '-' : '+') . '1 day');
$dates[] = $start->format($format);
}
return $dates;
}
public function export(){
$getdateRangeVal = $this->getdaterange($from, $to);
foreach ($_data as $value) {
$arrstatus[$value->emp_primary] = $value;
for($i = 0; $i<count($getdateRangeVal); $i++){
$key = array_search($getdateRangeVal[$i], array_column($_data, 'date'));
if(strlen($key) > 0) {
$arrstatus[$value->emp_primary]->dateRange[] = array(
"status" => "P",
"getdateRangeVal" => $getdateRangeVal[$i],
"intime" => $_data[$key]->in_time,
"outtime" => $_data[$key]->out_time,
"totaltime" => $_data[$key]->total_time,
);`enter code here`
} else {
$arrstatus[$value->emp_primary]->dateRange[] = array(
"status"=>"A",
"getdateRangeVal"=>$getdateRangeVal[$i],
"intime" => "",
"outtime" => "",
"totaltime" => "",
);
}
}
}
}
这是这个程序的结果
Array
(
[1] => stdClass Object
(
[firstname] => Amol
[lastname] => Auti
[emp_primary] => 1
[emp_id] => 1001
[company_name] => Maverick Solution
[id] => 5
[in_time] => 09:00:00
[out_time] => 12:00:00
[total_time] => 03:00:00.000000
[date] => 2018-08-06
[device_id] => 12:12:12:12
[dateRange] => Array
(
[0] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-01
[intime] =>
[outtime] =>
[totaltime] =>
)
[1] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-02
[intime] =>
[outtime] =>
[totaltime] =>
)
[2] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-03
[intime] =>
[outtime] =>
[totaltime] =>
)
[3] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-04
[intime] => 09:00:00
[outtime] => 16:00:00
[totaltime] => 07:00:00.000000
)
[4] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-05
[intime] => 09:00:00
[outtime] => 16:00:00
[totaltime] => 07:00:00.000000
)
[5] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-06
[intime] => 09:00:00
[outtime] => 12:00:00
[totaltime] => 03:00:00.000000
)
)
)
[2] => stdClass Object
(
[firstname] => Sumit
[lastname] => Malusare
[emp_primary] => 2
[emp_id] => 1002
[company_name] => Maverick Solution
[id] => 20
[in_time] => 09:00:00
[out_time] => 18:00:00
[total_time] => 09:00:00.000000
[date] => 2018-08-05
[device_id] => 12:12:12:12
[dateRange] => Array
(
[0] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-01
[intime] =>
[outtime] =>
[totaltime] =>
)
[1] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-02
[intime] =>
[outtime] =>
[totaltime] =>
)
[2] => Array
(
[status] => A
[getdateRangeVal] => 2018-08-03
[intime] =>
[outtime] =>
[totaltime] =>
)
[3] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-04
[intime] => 09:00:00
[outtime] => 16:00:00
[totaltime] => 07:00:00.000000
)
[4] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-05
[intime] => 09:00:00
[outtime] => 16:00:00
[totaltime] => 07:00:00.000000
)
[5] => Array
(
[status] => P
[getdateRangeVal] => 2018-08-06
[intime] => 09:00:00
[outtime] => 12:00:00
[totaltime] => 03:00:00.000000
)
)
)
)
查看数据,我必须将 3 条记录添加到 emp_primary 1 或数组 [1],并将 1 条记录添加到第二个数组,但第一个 emp 记录被分配给另一个所有记录,请帮助我。
解决方案
改变了你的功能。
public function export(){
$getdateRangeVal = $this->getdaterange($from, $to);
foreach ($_data as $value) {
$valToStore = $value;
for($i = 0; $i<count($getdateRangeVal); $i++){
$key = array_search($getdateRangeVal[$i], array_column($_data, 'date'));
if(strlen($key) > 0) {
$valToStore->dateRange[] = array(
"status" => "P",
"getdateRangeVal" => $getdateRangeVal[$i],
"intime" => $_data[$key]->in_time,
"outtime" => $_data[$key]->out_time,
"totaltime" => $_data[$key]->total_time,
);
} else {
$valToStore->dateRange[] = array(
"status"=>"A",
"getdateRangeVal"=>$getdateRangeVal[$i],
"intime" => "",
"outtime" => "",
"totaltime" => "",
);
}
}
$arrstatus[$value->emp_primary][] = $valToStore;
}
}
试一次。
推荐阅读
- sas - 如何在 SAS 中编写 foreach 循环语句?
- r - 创建一个输出一系列 2×2 表的函数
- google-sheets - How to use several conditions with QUERY + IMPORTRANGE in google sheets?
- .htaccess - url issue any link is directing back to home page or 404 not found. The error is /storage/emulated/0/htdocs/naira.com/incfiles/urls.php on line 18
- r - WCAG 2.1 与 shinydashboard 应用程序表单标签的兼容性
- amazon-web-services - Amazon MQ & ETL- how to read the data?
- php - PHP Protect property cannot be public but needed in Test
- sass - How to integrate @for loops with different variables?
- python - Discord bot 不响应命令
- sql-server - BizTalk setup - issues with SSO configuration