PHP 返回数字在数组范围之间的键



如果我有一个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只有几个元素,我可以使用 forforeach 来比较键,但如果数组$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"
]

相关内容

  • 没有找到相关文章

最新更新