如果我有一个php数组$date
如下所示:
Array
(
[100] => Array
(
[card] => 5244
[start_date] => 2019-05-03 00:00:00
)
[93] => Array
(
[card] => 9526
[start_date] => 2019-05-20 00:00:00
)
[65] => Array
(
[card] => 1537
[start_date] => 2019-07-09 00:00:00
)
...
)
我也有一些随机数,例如:1, 34, 67, 120...
我的问题是:
- 当随机数为 1 或 34 时,将其与
$date
的键(100、93、65(进行比较,然后返回空, - 当随机数为 67 时,它将返回
$date[65]
,因为这个数字介于 65 和 93 之间。 - 当随机数为 120 时,它将返回
$date[100]
,因为这个数字介于 100 和 ∞(无限(之间。
如果数组$date
只有几个元素,我可以使用 for 或 foreach 来比较键,但如果数组$date
有很多元素,我们有没有一个简单的方法可以做到这一点?
$dates = [
100 => [
'card' => 5244,
'start_date' => '2019-05-03 00:00:00'
],
93 => [
'card' => 9526,
'start_date' => '2019-05-20 00:00:00'
],
65 => [
'card' => 1537,
'start_date' => '2019-07-09 00:00:00'
]
];
$randoms = [1, 34, 67, 120];
foreach ($randoms as $random) {
$matchDate = $this->matchDates($dates, $random);
var_dump($matchDate);
}
/**
* @param array $dates
* @param $random
* @return array
*/
protected function matchDates(array $dates, $random): array
{
$minKey = min(array_keys($dates));
$maxKey = max(array_keys($dates));
if ($random < $minKey) {
return [];
}
if ($random > $maxKey) {
return $dates[$maxKey];
}
foreach ($dates as $key => $date) {
if ($random >= $key) {
return $date;
}
}
}
按预期返回:
[]
[]
array:2
"card" => 1537
"start_date" => "2019-07-09 00:00:00"
]
array:2
"card" => 5244
"start_date" => "2019-05-03 00:00:00"
]