2016-06-12 5 views
0

軍隊の列が並んでいる配列があり、現在の時刻までの次の値を見つけようとしています。たとえば、午前9時30分になると9時40分に戻ってくるはずです。なぜなら、次の時間なので、午前10時です。私の配列の次の最大値を返さない

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")); 

私は、最初の数回の前にゼロをすべて削除しようとすると、問題を診断しようと多くの時間が19:00のも、見知らぬ結果を返されたことをしてきました。

+0

fyiの前に「0」を付けると、phpはそれを8進数として解釈します。 –

+1

print_rを使ってソートした後に配列を出力しようとしましたか? – bksi

+0

それはいつも終わりを返します($ array) – bksi

答えて

0

私はあなたのアレイとプレフィックス番号でエラーが発生しました:

Parse error: Invalid numeric literal in (line number of array)...

あなたは文字列としてアレイ上の値を定義し、(int)と機能にそれらをキャストすることができます。以下の解決策を参照してください。

<?php 
function closest($array, $number) { 
    sort($array); 
    foreach ($array as $a) { 
     if ((int) $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); 

$nexttime = closest($array, '0930'); 
echo $nexttime; 

デモ:先行ゼロとhttp://ideone.com/TceTRb

0

番号が8進数、小数で例えば0730である472として処理されます。 9などの無効な数字が8進整数で指定された場合、残りの数字は無視されます。

リストの桁のリストを1つの長い文字列として保存し、explode()を使用して配列に変換し、4桁の値の前後に引用符を入れて配列の各要素を文字列として定義し、(int)を適切な型関数のキャスト

<?php 
function closest($array, $number) { 
sort($array); 
foreach ($array as $a) { 
    if ($a >= $number) return $a; 
} 
return end($array); 
} 

$string="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"; 
$array=explode(",", $string); 
$number = date("Hi"); 
$nexttime = closest($array, $number); 
echo $nexttime; 
関連する問題