私は本当に混乱しています。形式が異なる可能性のある日付の配列をソートするために、関連する多くのアプローチを試しました。
たとえば、日付の配列があります。
"0"=>"09.10.2012"
"1"=>"02.10.12"
"2"=>"27.09.15"
"2.0"=>"28.09.2012"
"2.1"=>"29.9.2012"
"2.2"=>"29.09.2012"
"3"=>"9.10.2012"
"3.1"=>"23.4.10"
"4"=>"28.09.2012"
"5"=>"26.10.2012"
"6"=>"12.09.98"
"6.0"=>"05.03.2013"
"6.1"=>"23.4.2013"
(理由により、キーは文字列です)
これで、日、月、年という同じ形式の順序になることがわかりました。ただし、指定された配列でわかるように、桁数は変更される可能性があります。
私は基本的にそれらを日-月-年 (strtotime()
ドキュメントに従って認識するヨーロッパ形式) に解析し、Unix タイムスタンプに変更しましたasort()
。
[6]->[] -- 12.09.98
[1]->[1034380800] -- 02.10.12
[2.0]->[1348790400] -- 28.09.2012
[4]->[1348790400] -- 28.09.2012
[2.2]->[1348876800] -- 29.09.2012
[2.1]->[1348876800] -- 29.9.2012
[3]->[1349740800] -- 9.10.2012
[0]->[1349740800] -- 09.10.2012
[5]->[1351209600] -- 26.10.2012
[6.0]->[1362441600] -- 05.03.2013
[6.1]->[1366675200] -- 23.4.2013
[3.1]->[1681084800] -- 23.4.10
[2]->[1820966400] -- 27.09.15
ご覧のとおり、 False[6](unixtime)
が含まれており、日付の変換に失敗しています。strtotime()
ここに私のコードがあります:
function sortArrays_ByDate($target){
foreach($target as $key_s => $val_s) { $date_exp = preg_replace('#(\.|_)#','-',$val_s); $target[(string)$key_s] = $date_exp; }
foreach($target as $key_s => $val_s) { $date_exp = strtotime($val_s); $target[(string)$key_s] = $date_exp; }
asort($target);
return $target;
}
何が悪いのか誰か説明してくれませんか...
ありがとう