について別の質問がありpreg_match
ます。
コメントの日付がコメント自体の中に (手動で) 書き込まれているテーブルがあり、その日付と場所を別の列に抽出する必要があります。
コメントと日付は次のようにスタイル設定されていることがわかりました。
+-------+----------------------+--------------+
| id | warning_sent | warning_date |
+-------+----------------------+--------------+
| 6109 | 2011-06-28 | 0000-00-00 |
| 6123 | 2012 02 14 | 0000-00-00 |
| 6126 | Some text 18.11.10\n | 0000-00-00 | /* This is 2010-11-18 */
| 13750 | 2011-06-28\n | 0000-00-00 |
| 8108 | 7-01-2010 | 0000-00-00 |
| 9954 | 2012.07.03 | 0000-00-00 |
| 6110 | Some text 21-02-2011 | 0000-00-00 |
+-------+----------------------+--------------+
今、私が考えることができる唯一のこと (そしてその方法を知っている) は、最初の数字を探し、次に最後の数字を探すことです。その間に文字列を何らかの方法で分析しますが、コメント テキストに数値が含まれている場合、これは深刻な問題になります。
質問は次のとおりです。コメント内のすべての日付 (各コメントに 1 つだけあります) を見つけて、目的の YYYY-MM-DD 形式で他の列に自動的に保存するにはどうすればよいですか?
編集:これはうまくいきました、@infinityに感謝します
$query = "SELECT id, warning_sent FROM data";
$result = qq( $query );
foreach( $result as $values )
{
preg_match( '/[\d]{4}((-|\s|\.)[\d]{2}){2}|([\d]{1,2}(\.|-)){2}[\d]{2,4}/', $values['warning_sent'], $matches );
$old_date = $matches[0];
$new_date = '0000-00-00';
/* 2011-06-28, 2012 02 14, 18.11.10, 7-01-2010, 2012.07.03, 21-02-2011, 20.10.2010 */
$formattings = array( 'Y-m-d', 'Y m d', 'd.m.Y', 'd.m.y', 'j-m-Y', 'Y.m.d', 'd-m-Y' );
for( $k=0; $k<sizeof( $formattings ); $k++ )
{
$sub_date = DateTime::createFromFormat( $formattings[$k], $old_date );
$sub_date = (array)$sub_date;
$timestamp = strtotime( $sub_date['date'] );
$check_date = date( $formattings[$k], $timestamp );
if( $old_date == $check_date ) $new_date = date( 'Y-m-d', $timestamp );
}
$warning_sent_date[$values['id']] = $new_date;
}