我在PHP中構建了一個測試模擬,由於速度問題我進行了重建。測試必須實際運行一定的天數,小時數,然後在該小時內完成。在數組中找到最後一個非零值
我創建了一個包含每小時包含多少項目的數組。所以:
$arrItemsEachHour(
0=> 0
1=> 0
2=> 0
3=> 0
4=> 0
5=> 0
6=> 0
7=> 0
8=> 1
9=> 2
10=> 4
11=> 5
12=> 6
13=> 7
14=> 7
15=> 8
16=> 8
17=> 8
18=> 7
19=> 6
20=> 5
21=> 4
22=> 4
23=> 1
24=> 0
);
這是每天的相同數組。
我需要在仿真運行後更新數據庫。我用的是mysql插入查詢,如下所示:
$strSql = 'insert into results (id, day, hour, item, won, lost) values (1,2,3,6,2,4),
(1,2,4,7,3,4),(),()......();';
我需要知道模擬結束,所以我可以結束MySQL的字符串。 $ strSql不在for循環中,在這些循環中,按照上面介紹的方式創建和保存值。
所以我需要做一個if語句,當日期等於最後一天(我手邊有這個值)並且最後一個非零值當前在for循環中時,它會關閉mysql語句。
這是我的for循環的樣子:
for($i = 1; $i <= $this->intNumberOfDays; $i ++) {
for($n = 0; $n < 24; $n ++) {
for($k = 0; $k <= $arrItemsEachHour [$n]; $k ++) {
}
}
}
我的問題是:
我怎麼能決定將來我有一個數組的最後一個非零值?
答:
$length = count($arrItemsEachHour) -1;
for($k = $length; $k >= 0; $k --)
{
if($arrItemsEachHour[$k] != 0)
{
// From $arrItemsEachHour[$k + 1] to $arrItemsEachHour[23] there are 0
}
}
如果聲明:
if ($i == $this->intNumberOfDays && $intLastHour == $n && $k == $arrItemsEachHour [$n])
{ 'values();'} else {'values(),';}
我會研究使用'filter()'和'end()'。過濾掉所有零值,然後轉到數組的末尾。 –
你需要得到最後一個非零元素形式$ arrItemsEachHour數組? – Kailas