$month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
$str = "The fly went away in 1990-11-20";
$pattern = array('/(\d{4})-(\d{1,2})-(\d{1,2})/');
$replacement = array('${3}.'.'$month[\2 -1]<-- I don't know'.' ${1}');
$res = preg_replace($pattern, $replacement, $str);
echo $res;
Результат должен быть "Муха ушла в 20 ноября 1990 года". (Я знаю, что шаблон может быть 0000-00-00. Но это нормально на данный момент). Что здесь заменяет "$ month [\ 2 -1]"?
Вы не можете использовать preg_replace напрямую. Попробуй это
function doReplace($matches) {
$month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
return $matches[3] . ' ' . $month[$matches[2] - 1] . ' ' . $matches[1];
}
$str = "The fly went away in 1990-11-20";
$pattern = array('/(\d{4})-(\d{1,2})-(\d{1,2})/');
$res = preg_replace_callback($pattern, 'doReplace', $str);
echo $res;
Использует preg_replace_callback - для получения дополнительной информации см. Руководство.
Используйте preg_replace_callback()
:
$str = preg_replace_callback(
$pattern,
function (array $matches) use ($month) {
return $matches[3].'.'.$month[$matches[2]-1].' '.$matches[1];
},
$str
);
Попробуйте этот рабочий пример, он даст вам желаемый результат
//echo date('d.F Y',strtotime('1990-11-20 00:00:00'));
$month = array('','January','February','March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
$str = "The fly went away in 1990-11-20";
$pattern = array('/(\d{4})-(\d{1,2})-(\d{1,2})/');
$replacement = array('${3}.'.$month[12-1].' ${1}');
$res = preg_replace($pattern, $replacement, $str);
echo $res;
2014-05-15
?