我知道在更改数组中的键之前已经问过这个问题, 但是如果密钥中的日期与日期范围相匹配,我想要的是那个密钥应该被替换。
E-克 我有一个数组,其中包含从第1天到第31天的整个月的按键
[Project 456] => Array
(
[2014-12-01] => 5
[2014-12-02] => 00
[2014-12-03] => 00
[2014-12-04] => 00
[2014-12-05] => 00
[2014-12-06] => 00
[2014-12-07] => 00
[2014-12-08] => 00
[2014-12-09] => 00
[2014-12-10] => 8
[2014-12-11] => 00
[2014-12-12] => 00
[2014-12-13] => 00
[2014-12-14] => 00
[2014-12-15] => 00
[2014-12-16] => 00
[2014-12-17] => 00
[2014-12-18] => 00
[2014-12-19] => 00
[2014-12-20] => 00
[2014-12-21] => 00
[2014-12-22] => 00
[2014-12-23] => 00
[2014-12-24] => 00
[2014-12-25] => 00
[2014-12-26] => 00
[2014-12-27] => 00
[2014-12-28] => 00
[2014-12-29] => 00
[2014-12-30] => 00
[2014-12-31] => 00
[Total] => 13
)
我希望日期与其他数组的日期范围相匹配
Array
(
[0] => stdClass Object
(
[AvailableLeaveTypes] => Sick
[TotalAllocatedLeaves] => 6
[TotalLeavesTaken] => 3
[Balance] => 3
[LeaveFrom] => 2014-12-05
[LeaveTo] => 2014-12-08
)
)
然后具有匹配日期的第一个数组的键应替换为LeaveType,即Sick
我必须遵循哪种方法?
== - == - == - == - == - == - == - == - ==
更新
First Array实际上是MultiDimentional Array。
这是完整的数组
Array
(
[Date] => Array
(
[0] => 01
[1] => 02
[2] => 03
[3] => 04
[4] => 05
[5] => 06
[6] => 07
[7] => 08
[8] => 09
[9] => 10
[10] => 11
[11] => 12
[12] => 13
[13] => 14
[14] => 15
[15] => 16
[16] => 17
[17] => 18
[18] => 19
[19] => 20
[20] => 21
[21] => 22
[22] => 23
[23] => 24
[24] => 25
[25] => 26
[26] => 27
[27] => 28
[28] => 29
[29] => 30
[30] => 31
[Total] => Total Hours Worked
)
[Day] => Array
(
[0] => Monday
[1] => Tuesday
[2] => Wednesday
[3] => Thursday
[4] => Friday
[5] => Saturday
[6] => Sunday
[7] => Monday
[8] => Tuesday
[9] => Wednesday
[10] => Thursday
[11] => Friday
[12] => Saturday
[13] => Sunday
[14] => Monday
[15] => Tuesday
[16] => Wednesday
[17] => Thursday
[18] => Friday
[19] => Saturday
[20] => Sunday
[21] => Monday
[22] => Tuesday
[23] => Wednesday
[24] => Thursday
[25] => Friday
[26] => Saturday
[27] => Sunday
[28] => Monday
[29] => Tuesday
[30] => Wednesday
)
[Project 456] => Array
(
[2014-12-01] => 5
[2014-12-02] => 00
[2014-12-03] => 00
[2014-12-04] => 00
[2014-12-05] => 00
[2014-12-06] => 00
[2014-12-07] => 00
[2014-12-08] => 00
[2014-12-09] => 00
[2014-12-10] => 8
[2014-12-11] => 00
[2014-12-12] => 00
[2014-12-13] => 00
[2014-12-14] => 00
[2014-12-15] => 00
[2014-12-16] => 00
[2014-12-17] => 00
[2014-12-18] => 00
[2014-12-19] => 00
[2014-12-20] => 00
[2014-12-21] => 00
[2014-12-22] => 00
[2014-12-23] => 00
[2014-12-24] => 00
[2014-12-25] => 00
[2014-12-26] => 00
[2014-12-27] => 00
[2014-12-28] => 00
[2014-12-29] => 00
[2014-12-30] => 00
[2014-12-31] => 00
[Total] => 13
)
)
我想如果我可以使用IF语句,如果Top Arrays Keys不是Day和Date那么可以匹配内部日期。所以比较两个数组的可能结果就是。
Array
(
[Date] => Array
(
[0] => 01
[1] => 02
[2] => 03
[3] => 04
[4] => 05
[5] => 06
[6] => 07
[7] => 08
[8] => 09
[9] => 10
[10] => 11
[11] => 12
[12] => 13
[13] => 14
[14] => 15
[15] => 16
[16] => 17
[17] => 18
[18] => 19
[19] => 20
[20] => 21
[21] => 22
[22] => 23
[23] => 24
[24] => 25
[25] => 26
[26] => 27
[27] => 28
[28] => 29
[29] => 30
[30] => 31
[Total] => Total Hours Worked
)
[Day] => Array
(
[0] => Monday
[1] => Tuesday
[2] => Wednesday
[3] => Thursday
[4] => Friday
[5] => Saturday
[6] => Sunday
[7] => Monday
[8] => Tuesday
[9] => Wednesday
[10] => Thursday
[11] => Friday
[12] => Saturday
[13] => Sunday
[14] => Monday
[15] => Tuesday
[16] => Wednesday
[17] => Thursday
[18] => Friday
[19] => Saturday
[20] => Sunday
[21] => Monday
[22] => Tuesday
[23] => Wednesday
[24] => Thursday
[25] => Friday
[26] => Saturday
[27] => Sunday
[28] => Monday
[29] => Tuesday
[30] => Wednesday
)
[Project 456] => Array
(
[2014-12-01] => 5
[2014-12-02] => 00
[2014-12-03] => 00
[2014-12-04] => 00
[2014-12-05-Sick] => 00
[2014-12-06-Sick] => 00
[2014-12-07-Sick] => 00
[2014-12-08-Sick] => 00
[2014-12-09] => 00
[2014-12-10] => 8
[2014-12-11] => 00
[2014-12-12] => 00
[2014-12-13] => 00
[2014-12-14] => 00
[2014-12-15] => 00
[2014-12-16] => 00
[2014-12-17] => 00
[2014-12-18] => 00
[2014-12-19] => 00
[2014-12-20] => 00
[2014-12-21] => 00
[2014-12-22] => 00
[2014-12-23] => 00
[2014-12-24] => 00
[2014-12-25] => 00
[2014-12-26] => 00
[2014-12-27] => 00
[2014-12-28] => 00
[2014-12-29] => 00
[2014-12-30] => 00
[2014-12-31] => 00
[Total] => 13
)
)
但我不想打扰它所处的顺序。只想改变键。
这是另一个完整数组,但其中只有一个拥有日期范围的数据。
Array
(
[0] => stdClass Object
(
[AvailableLeaveTypes] => Sick
[TotalAllocatedLeaves] => 6
[TotalLeavesTaken] => 3
[Balance] => 3
[LeaveFrom] => 2014-12-05
[LeaveTo] => 2014-12-08
)
[1] => stdClass Object
(
[AvailableLeaveTypes] => On Leave
[TotalAllocatedLeaves] => 0
[TotalLeavesTaken] => 0
[Balance] => 0
[LeaveFrom] =>
[LeaveTo] =>
)
[2] => stdClass Object
(
[AvailableLeaveTypes] => Earned Leave
[TotalAllocatedLeaves] => 0
[TotalLeavesTaken] => 0
[Balance] => 0
[LeaveFrom] =>
[LeaveTo] =>
)
[3] => stdClass Object
(
[AvailableLeaveTypes] => Casual
[TotalAllocatedLeaves] => 0
[TotalLeavesTaken] => 0
[Balance] => 0
[LeaveFrom] =>
[LeaveTo] =>
)
[4] => stdClass Object
(
[AvailableLeaveTypes] => Annual
[TotalAllocatedLeaves] => 0
[TotalLeavesTaken] => 0
[Balance] => 0
[LeaveFrom] =>
[LeaveTo] =>
)
[5] => stdClass Object
(
[AvailableLeaveTypes] => Unpaid
[TotalAllocatedLeaves] => 0
[TotalLeavesTaken] => 0
[Balance] => 0
[LeaveFrom] =>
[LeaveTo] =>
)
)
因此,如果LeaveFrom
和LeaveTo
为空,则不会为其更新第一个数组。只适用于那些有来自/到日期的人。
答案 0 :(得分:1)
你可以使用一个简单的foreach循环。首先,使用离开的空闲对象清理假数组,因为您不需要处理它们:
$leaves_array = array_filter($leaves_array, function($val){
return (!empty($val->LeaveFrom) && !empty($val->LeaveTo));
});
然后在循环上,父循环是叶子,内循环是项目。
尝试将它们转换为DateTime对象,以便您可以轻松地比较日期。然后在处理过程中,如果该键位于日期范围内,则将其放入临时持有者中,然后取消设置。取消设置后,再按下另一组新密钥,然后按键:
foreach($leaves_array as $leave) {
$range = array();
foreach ($project_array['Project 456'] as $date => $value) {
try {
$new_date = new DateTime($date);
$from = new DateTime($leave->LeaveFrom);
$to = new DateTime($leave->LeaveTo);
if($new_date >= $from && $new_date <= $to) {
$range[] = $date . '-Sick';
unset($project_array['Project 456'][$date]);
}
} catch(Exception $e) {
}
}
// changes
foreach($range as $range_date) {
$project_array['Project 456'][$range_date] = '00';
}
// resort
ksort($project_array['Project 456']);
}
但我的建议是,不是改变这些键,为什么不在这些日期内创建一个数组,然后只是在其中推送相关的细节,比如留下日期和东西。