У меня есть массив с кучей военных времен, перечисленных, и я пытаюсь найти следующее ближайшее значение до текущего времени. Например, когда это 9:30 утра, он должен вернуться в 9:40, потому что это следующее самое большое время, но вместо этого он вернется в 10:00, независимо от того, в какое время это произойдет.Не возвращаю следующее самое большое значение в моем массиве
function closest($array, $number) {
sort($array);
foreach ($array as $a) {
if ($a >= $number) return $a;
}
return end($array);
}
$array = array(0730,0750,0810,0830,0840,0850,0900,0910,0920,0930,0940,0950,1000,1010,1020,1030,1040,1050,1100,1110,1120,1130,1140,1150,1210,1230,1250,1310,1330,1350,1410,1430,1450,1510,1530,1550,1610,1630,1650,1710,1720,1730,1740,1750,1800,1810,1820,1830,1840,1850,1900,1910,1920,1930,1940,1950,2000,2010,2020,2030,2040,2050,2100,2120,2140,2200,2220,2240,2300,2320);
$number = date("Hi");
$nexttime = closest($array, $number);
echo date("g:i a", strtotime("$nexttime"));
Я прошел через это много раз, пытаясь диагностировать проблему, пытаясь удалить все нули перед первыми несколько раз возвращал даже незнакомый результат 7:00 вечера.
fyi prefixing number with '0' сообщает php интерпретировать его как восьмеричное. –
Вы пытались вывести массив после сортировки с помощью print_r? – bksi
Кажется, что он всегда возвращает конец ($ array) – bksi