2016-08-23 5 views
-2

Ich habe ein Array mit Daten. dh.So erhalten Sie verschiedene Monate von Array mit Daten

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

Ich brauche die verschiedenen Monate in Array. dh.

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

Ich brauche es eine foreach zu tun zeigen: Juni - Juy - August mit den verschiedenen Monaten aus dem Array Daten. (Der Teil, den ich weiß wie)

+0

nicht klar, was Sie – kikuyu1

+3

'$ result = array_unique (array_map (function ($ value) {return (neue Datetime ($ value)) fragen -> Format ('n'); }, $ data)); ' –

Antwort

3

Sie können das Datum mit einer Kombination von array_map, und array_unique umformatieren, um dieses Ergebnis zu erreichen.

$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" 
} 

Natürlich ist es wichtig, dies in zwei Terminen beider Ergebnisse zu beachten, wie 2015-08-11 und 2016-08-04 als einen Wert im Array zeigt nach oben. Es ist also nicht ganz klar, warum Sie dies tun möchten, aber dies wird Ihren spezifischen Anforderungen entsprechen.

1

Dies ist die Schleife Sie brauchen:

<?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); 
?> 

Edit: Anzeige Monat Name:

<?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!!! 
    } 
} 
?> 

Edit # 2: Speicherung von Monatsnamen in Array:

<?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

das ist die lange Version, die ich vermeiden wollte, array_map() wird den Trick machen – jesse94

+0

jesse94, Sie erwähnten, Sie brauchten eine Schleife ... –

+1

Jose, ich denke, der Teil der Schleife war nicht klar . Ich möchte eine foreach machen, um zu zeigen: Juni - Juy - August mit den verschiedenen Monaten von der Datumsreihe. – jesse94

0

Verwenden Sie einfach substr auf jedem Ihrer Daten Array-Einträge, um die Zeichen 5 bis 7 abzurufen, speichern Sie sie in einem neuen Array:

$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

auch schlechte Leistung –

Verwandte Themen