2017-07-30 55 views
2

我用笨3(日曆類)刪除前導零和我有這個函數來獲取日曆數據(表只是有一個日期列和數據列):如何從數組鍵

function get_calendar_data($year, $month) { 
    $query = $this->db->select('date, data')->from('calendar')->like('date', "$year-$month", 'after')->get(); 
    $cal_data = array(); 
    foreach ($query->result() as $row) { 
     $cal_data[substr($row->date,8,2)] = $row->data; 
    } 
    return $cal_data; 
} 

它的工作原理確定併產生陣列一個月,$ cal_data,由天爲鍵和值的(在這種情況下,顏色的名稱)和的var_dump通常是這樣的:

array (size=6) 
26 => string 'amber' (length=5) 
27 => string 'red' (length=3) 
28 => string 'red' (length=3) 
25 => string 'amber' (length=5) 
'04' => string 'red' (length=3) 
'07' => string 'red' (length=3) 

其日曆要求。然而,由於日曆似乎不需要它們,所以在具有前導零的日子方面存在問題。所以值不顯示04和07作爲測試,我改寫了foreach循環地說:

$cal_data[substr($row->date,9,1)] = $row->data; 

所以關鍵便拿起僅日期字符串的最後一個字符,而在這種情況下, 4和7的值確實顯示正確。

有沒有簡單的方法來刪除前導零,所以鍵將是4和7?

回答

5

你可以這樣做(注意強制轉換爲int):

foreach ($query->result() as $row) { 
    $cal_data[(int)substr($row->date,8,2)] = $row->data; 
} 
+0

非常感謝你 - 問題解決了! – Perkin5

2

我猜,因爲你有SUBSTR(...,8,2)我認爲這是一個完整的日期2017年一樣-07-30或類似的東西。
這意味着你可以使用date()來操作數據。

$cal_data[date("j", $row->date)] = $row->data; 

日期(「j」)是沒有前導零的天數。
http://php.net/manual/en/function.date.php

+0

你對我認爲是標準MySql格式的日期格式是正確的。以前的答案解決了我的問題,但我想這會同樣好。我會把它放在我有用的技術中。謝謝一堆! – Perkin5

+0

沒問題。兩種方法的時間差別很小。這裏是每種方法的100個輸出。 https://3v4l.org/2HHoh/perf#output https://3v4l.org/CWUMQ/perf#output。如果你輸出9個月(01-09)的12個月時間,那麼沒有太大的區別,但是如果你做得更多,我會建議改變方法,因爲接受的答案比較慢(至少在某些版本的php中)。 @ perkin5 – Andreas

+0

對不起,我做了一個更現實的測試,並且(int)更快。 https://3v4l.org/pJZWt/perf#output https://3v4l.org/ZXCpV/perf#output – Andreas