PHP获取键值或最大值下限

PHP获取键值或最大值下限,php,arrays,Php,Arrays,我得到了这个数组: $by_date = array( "2018-10-05"=>54, "2018-10-07"=>20, "2018-10-08"=>31, "2018-10-12"=>52 ); 我想按日期获取值,但如果日期不存在,则获取最低的日期值 例如: 如果日期是2018-10-07,我会得到20 如果日期是2018-10-10,我会得到31 这可能导致数组中日期和最后一个键之间存在更大的差异 例如,如果日期是201

我得到了这个数组:

$by_date = array(
    "2018-10-05"=>54,
    "2018-10-07"=>20,
    "2018-10-08"=>31,
    "2018-10-12"=>52
    );
我想按日期获取值,但如果日期不存在,则获取最低的日期值

例如:

如果日期是2018-10-07,我会得到20

如果日期是2018-10-10,我会得到31

这可能导致数组中日期和最后一个键之间存在更大的差异

例如,如果日期是2019-01-25,我将得到52,因为2018-10-12是数组中的最后一个键


感谢您的帮助:

您可以使用一个简单的if条件来检查您作为数组上的键的输入。如果满足条件,则返回匹配的值,否则,使用和返回具有最高键的值

$by_date = array(
    "2018-10-05"=>54,
    "2018-10-07"=>20,
    "2018-10-08"=>31,
    "2018-10-12"=>52
    );

$testVal = '2018-10-12'

if (isset($by_date[$testVal]))
    return $by_date[$testVal];
else 
    return $by_date[max(array_keys($by_date))];

你们这些家伙,对了,预告片的答案还不够好 我做了一个适合我的工作,但不确定效率

if (!isset($by_date[$testVal])){
    $by_date[$testVal] = null;
    ksort($by_date);
    $date_key = array_search($price_date,array_keys($by_date));
    $by_date[$testVal] = (array_values($by_date)[$date_key-1]);
}

$by_date_price =  $by_date[$testVal];

感谢您的帮助和评论

我认为您正在获得否决票,因为您尚未共享您的尝试代码。如果成功,则这将给出数组中的最低值,而不是给定日期中的较低值。OP声明这将是错误的。数组_key_exists最好检查密钥这是作为密钥存储的,它不会采用datetime格式。对于日期2018-10-09或2018-10-10,您的输出是否为2015-10-08=>31对于键2018-10-08,数组的值将为31。最低的键是2018-10-05,因此这将是2018-10-10的输出,或者是数组中找不到的任何其他键。