2016-08-23 6 views
-2

私は日付の配列を持っています。すなわち、日付を含む配列から別の月を得る方法

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

別々の月を配列で取得する必要があります。すなわち、

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

日付配列とは別の月が表示されるようにforeachを実行する必要があります:June - Juy - August

+0

ないあなたが – kikuyu1

+3

'$結果を求めているものを明確に= array_unique(array_mapを(関数($値){リターン(新日時($値)) - >フォーマット( 'N'); }、$ data)); –

答えて

3

この結果を得るには、array_mapDateTime、およびarray_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

ホープ、 。私は、日付配列からの別々の月のJune - Juy - Augustを示すためにforeachをやることにしました。 – 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

もパフォーマンスが悪い –

関連する問題