我有三個陣列,分別為
$a = array('443563','443577','443270','443226','443334','443561','443322','443495')
$start =
array('2012/7/12','2012/7/13','2012/7/14','2012/7/16','2012/7/16','2012/7/17','2012/7/18','2012/7/18')
$end =
array('2012/7/15','2012/7/18','2012/7/14','2012/7/16','2012/7/21','2012/7/17','2012/7/18','2012/7/18')
以今天 2012/7/13 來說
我希望找出 符合 三天內(含今天)的號碼
所以日期區間應該
7/13-7/16 都符合條件
結果應該只有
443563
443577
443270
443226
443334
符合
請問程式碼要怎麼寫比較好呢??
你沒寫你的判斷邏輯是什麼,人家會把你說的7/13-7/16 都符合條件套用在 $start 與 $end 之間,因為你有列出這兩個陣列,於是得出只有
443270
443226
這 2 筆符合。因為會這樣寫:
<pre class="c" name="code"><?php
$a = array('443563','443577','443270','443226','443334','443561','443322','443495');
$start = array('2012/7/12','2012/7/13','2012/7/14','2012/7/16','2012/7/16','2012/7/17','2012/7/18','2012/7/18');
$end = array('2012/7/15','2012/7/18','2012/7/14','2012/7/16','2012/7/21','2012/7/17','2012/7/18','2012/7/18');
$today = strtotime('today');
$after3day = strtotime('today +3 day');
foreach ($a as $i => $key)
if (strtotime($start[$i]) >=$today && strtotime($end[$i]) <= $after3day)
echo $key, "\n";
?>
但是看到你的答案, 似乎只看 $start 而已。於是只判斷 $start:
<pre class="c" name="code"><?php
$a = array('443563','443577','443270','443226','443334','443561','443322','443495');
$start = array('2012/7/12','2012/7/13','2012/7/14','2012/7/16','2012/7/16','2012/7/17','2012/7/18','2012/7/18');
$end = array('2012/7/15','2012/7/18','2012/7/14','2012/7/16','2012/7/21','2012/7/17','2012/7/18','2012/7/18');
$today = strtotime('today');
$after3day = strtotime('today +3 day');
foreach ($a as $i => $key)
if (strtotime($start[$i]) >=$today && strtotime($start[$i]) <= $after3day)
echo $key, "\n";
?>
又得出只有
443577
443270
443226
443334
這 4 筆資料,怎麼都得不到 5 筆,到底是你敘述錯誤?還是答案錯誤?或是我誤會什麼了?
看起來有點像生產批號或叫貨進出貨時間, 把欄跟行交換一下:
a start end (是否符合 7/13-7/16)
443563 7/12 7/15 y
443577 7/13 7/18 y
443270 7/14 7/14 y
443226 7/16 7/16 y
443334 7/16 7/21 y
443561 7/17 7/17 n
443322 7/18 7/18 n
443495 7/18 7/18 n
這題型考的是"兩組時間的判斷", 所以請自己劃出幾個時間軸: (註: 為了避免照抄, 某些條件我故意刪除.)
就可以寫出幾種判斷式, 再考慮簡化: (對了, 到底用哪種語言寫啊? 我用自編語言好了 XD )
if ( start <= end and not ( end < 7/13 and start > 7/16 ) )
這樣挑出來
443563 7/12 7/15 y
443577 7/13 7/18 y
443270 7/14 7/14 y
443226 7/16 7/16 y
443334 7/16 7/21 y
這五筆.