日付の配列の形式をstringからDateTimeに変換する効率的な方法はありますか?配列を文字列からdatetimeに変換する
私はDateTimesの配列と日付の配列を文字列形式(例: "2017-01-01")で持っています。 "array_intersect"を使用して各配列のどのレコードが一致するかを判断する必要がありますが、両方ともDateTime形式でなければ動作しません。
日付の配列の形式をstringからDateTimeに変換する効率的な方法はありますか?配列を文字列からdatetimeに変換する
私はDateTimesの配列と日付の配列を文字列形式(例: "2017-01-01")で持っています。 "array_intersect"を使用して各配列のどのレコードが一致するかを判断する必要がありますが、両方ともDateTime形式でなければ動作しません。
あなたがそうのような文字列を変換することができます...実際には配列内のオブジェクトの文字列値を比較しarray_intersect
ので
foreach($dateStrings as $dateString){
$dates[] = DateTime::createFromFormat('Y-m-d', $dateString);
}
いいですね。 $ dateStringsと$ dateStringと$ datesは何を表していますか? –
$ dateStringsは、文字列形式の日付の配列になります。 $ datesは、dateTimeでフォーマットされた要素の結果の配列で、既存のDateTimesの配列と交差することができます。 –
が、私は他の方法で回避を変換します:日時から文字列に。これは以下のようになります。
<?php
// Suppose you have these DateTime objects
$toConvert = [
DateTime::createFromFormat('Y-m-d', '2012-04-22'),
DateTime::createFromFormat('Y-m-d', '2012-05-10'),
DateTime::createFromFormat('Y-m-d', '2013-06-03'),
];
$dateStrings1 = ['2012-04-22', '2012-05-10', '2015-05-05'];
$dateFormat = 'Y-m-d';
// Convert the array of DateTime objects to strings
$dateStrings2 = array_map(function($dateTime) use ($dateFormat) {
return $dateTime->format($dateFormat);
}, $toConvert);
$intersection = array_intersect($dateStrings1, $dateStrings2);
var_dump($intersection);
これの出力は次のとおりです。
[あるarray_walk()](http://php.net/manual/en/function.array-を使用してarray (size=2) 0 => string '2012-04-22' (length=10) 1 => string '2012-05-10' (length=10)
おそらく? –
@ MarkBaker ITYM 'array_map()' - より一般的に元の配列を変異させない方が良い – Alnitak