2016-08-23 20 views
-2

我有一個包含日期的數組。即。如何從包含日期的數組中獲得不同的月份

array(
    0 => '2016-08-01', 
    1 => '2016-07-15', 
    2 => '2016-07-01' 
); 

我需要在數組中獲得不同的月份。即。

array(
    0 => 7, 
    1 => 8 
); 

我需要做一個foreach顯示:六月 - Juy日 - 8月從日期陣列的不同個月。 (這部分我知道如何)

+0

不清楚你問 – kikuyu1

+3

'$結果= array_unique(array_map(函數($值){返回(新的DateTime($值)) - >格式( 'N'); },$ data));' –

回答

3

您可以使用array_map,DateTimearray_unique的組合來重新設置日期以實現該結果。

$arr = array(
    0 => '2016-08-01', 
    1 => '2016-07-15', 
    2 => '2016-07-01' 
); 
$dates = array_unique(array_map(function($date) { 
    return DateTime::createFromFormat('Y-m-d', $date)->format('n'); 
}, $arr)); 

var_dump($dates); 
 
array(2) { 
    [0]=> 
    string(1) "8" 
    [1]=> 
    string(1) "7" 
} 

當然,一定要注意這導致像2015-08-112016-08-04都顯示爲數組中的一個值,兩個日期是非常重要的。所以目前還不完全清楚你爲什麼要這樣做,但是這將滿足你的特定要求。

1

這是循環中,您需要:

<?php 
$arr = array('2016-08-01', 
       '2016-07-15', 
       '2016-07-01'); 
$months = array(); // EMPTY ARRAY FOR MONTHS. 
foreach ($arr as $date) // VISIT EACH DATE IN ARRAY. 
{ $mon = substr($date,5,2); // EXTRACT THE MONTH DIGITS. 
    if (! in_array($mon,$months)) // IF MONTH IS NOT IN ARRAY 
    array_push($months,$mon); // INSERT THE MONTH DIGITS. 
} 
var_dump($months); 
?> 

編輯:顯示月份名稱:

<?php 
$arr = array('2016-08-01', 
       '2016-07-15', 
       '2016-07-01'); 
$months = array(); // EMPTY ARRAY FOR MONTHS. 
foreach ($arr as $date) // VISIT EACH DATE IN ARRAY. 
{ $mon = substr($date,5,2); // EXTRACT THE MONTH DIGITS. 
    if (! in_array($mon,$months)) // IF MONTH IS NOT IN ARRAY 
    { array_push($months,$mon); // INSERT THE MONTH DIGITS. 
     echo date ("F",mktime(null,null,null,$mon,1)); // ◄ MONTH NAME!!! 
    } 
} 
?> 

編輯#2:存儲陣列月份名稱:

<?php 
$arr = array('2016-08-01', 
       '2016-07-15', 
       '2016-07-01'); 
$months = array(); // EMPTY ARRAY FOR MONTHS. 
foreach ($arr as $date) // VISIT EACH DATE IN ARRAY. 
{ $mon = date("F",mktime(null,null,null,substr($date,5,2),1)); // EXTRACT MONTH. 
    if (! in_array($mon,$months)) // IF MONTH IS NOT IN ARRAY 
    array_push($months,$mon); // INSERT MONTH NAME IN ARRAY. 
} 
var_dump($months); 
?> 
+0

這是我想避免的長版本,array_map()會做詭計 – jesse94

+0

jesse94,你提到你需要一個循環... –

+1

Jose,我猜這個循環部分不清楚。我想做一個foreach來展示:6月 - Juy - 8月與日期排列不同的月份。 – jesse94

0

只需使用substr在每個日期數組條目中檢索字符5到7,然後將它們存儲在新數組中:

$dates = array(
    0 => '2016-08-01', 
    1 => '2016-07-15', 
    2 => '2016-07-01'); 
$months = array(); 

foreach ($dates as $date) { 
    $months[] = (int)substr($date, 5, 2); 
} 
$months = array_unique($months); // Remove duplicates 
sort($months); 
+0

表現也不錯 –

相關問題