2015-01-16 92 views
0

我有一個數組,我從sql數據庫中獲取,並且每個元素被保存爲 YYYY-MM-DD。但我只需要每個元素的年份。我當前的代碼:獲取數組中每個元素的前4位數

if(isset($_GET['date'])){ 
$dates= unserialize(urldecode($_GET['date'])); 
foreach($dates as $i){ 
$year = substr($i, 0, 4); 
}} 
print_r($year); 

但是當我運行的代碼,它只是給了我

我已經嘗試過array_slice但沒有工作或者

+0

由於您重寫'$ year'變量,您只會得到最後一個值......您能告訴我們您想如何使用這些年份值嗎? – Tushar

+0

另外需要注意的是,我會提到,在幾乎所有語言中,作爲變量的'i',傳統上都是針對迭代和整數而不是爲值而保留的(按照樣式約定,不是顯式的)。如果你使用'foreach($ date作爲$ date)'或'foreach($ dates作爲$ s)'(用於'string'),它可能會讀得更好,而不會潛在地混淆'$ i'的情況一個整數(例如,當$ i表示一個打包或時代形式,如unix時間戳時)。 –

+0

非常好,我會記住我的朋友 –

回答

3
if(isset($_GET['date'])) { 
    $dates= unserialize(urldecode($_GET['date'])); 
    $year = array(); 
    foreach($dates as $i) { 
     $year[] = substr($i, 0, 4); 
    } 
} 
print_r($year); 

2個小小的變化將解決它。

+0

感謝上帝,我一直在這裏待了幾個小時,試圖找出它!Dankjewel barmhartige samaritaan –

1

原因您$year第一要素的一年是一個變量所以$year的值將在每次迭代時被覆蓋嘗試將$year定義爲array(),因此每次將值添加到新的數組索引上

$year[] = substr($i, 0, 4); 
+0

他已經在代碼中。 – Bogdan

+0

我看不到作爲數組 –

+0

爲什麼downvoted請發表評論 –

1

如果你想每個日期的年份,你應該使用它們,因爲你提取它們。例如,你可以把它們放入數組:

$years = array(); 
if (isset($_GET['date'])) { 
    $dates= unserialize(urldecode($_GET['date'])); 
    foreach($dates as $i){ 
     $year = (int)substr($i, 0, 4); 
     if (($year >= 1900) && ($year <= 2050)) 
      $years[] = $year; 
    } 
} 
print_r($years); 

請注意,您還可以追加數組$years之前測試日期的有效性。當然,您也可以測試結果數組本身。如果您願意,您還可以在foreach循環內「即時」使用它們。

但是,您不能重新分配同一個變量不同的值,並期望它不是分配給它的最後一個值。

相關問題