我设计了一个预订房间的系统,并以多维数组的形式存储数据。 现在我想编写一个函数来查找在时间和日期(从、到、日期)上重复的数组值。
逻辑是一间房间可以在一天内预订一次或多次,但不能在同一时间段内被一个或多个用户预订。例如,John 在 15/08/2014 预订了 1300-1500,这样就没有人可以再在此期间预订。
虽然我可以理解逻辑,但我不知道如何实现在检查时删除这些值的功能。
这是数组(数据):
$recordBooking = array(
"112"=>array(
"date"=>array(
"24/09/2014"=>array(
array(
"from"=>1,
"to"=>3,
"username"=>"Amy"
),
array( //duplicate data
"from"=>2,
"to"=>5,
"username"=>"John"
)
),
"27/09/2014"=>array(
array(
"from"=>1,
"to"=>3,
"username"=>"Chars"
)
),
"29/09/2014"=>array(
array(
"from"=>1,
"to"=>5,
"username"=>"Peter"
)
),
"30/09/2014"=>array(
array(
"from"=>3,
"to"=>6,
"username"=>"Amy"
)
)
)
)
);
我想设置警报消息并删除当函数检测到重复数据时重复的值。感谢您的帮助。
最佳答案
对于数组过滤,有一个 array_filter
发明了函数。假设您已经在迭代日期:
$booked = []; // holder for already booked
$result = array_filter(
$recordBooking['112']['date']['24/09/2014'], // array value when iterating dates
function($rb) use (&$booked) { // will filter this date
foreach($booked as $b) {
if(
($b['from'] < +$rb['from'] && $b['to'] > +$rb['from']) ||
($b['from'] < +$rb['to'] && $b['to'] > +$rb['to'])
) { // already booked!!!
echo "ALERT. Skipped: ${rb['username']}\n";
return false;
}
}
$booked[] = ['from' => +$rb['from'], 'to' => +$rb['to'] ]; // mark time as booked
return true;
}
);
var_dump($result);
// ⇒
/*
ALERT. Skipped: John
array(1) {
[0]=>
array(3) {
["from"]=>
int(1)
["to"]=>
int(3)
["username"]=>
string(3) "Amy"
}
}
*/
希望有帮助。
关于php - 使用 PHP 检查并删除多维数组中的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27055369/