Индекс Preg_replace в массиве заменяется шаблоном $ arr [{…}]

0
$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]"?

Теги:
arrays
replace
preg-replace

3 ответа

0
Лучший ответ

Вы не можете использовать 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 - для получения дополнительной информации см. Руководство.

  • 0
    Это ответ полезен! (Извините, в данный момент я не могу проголосовать за этот ответ)
  • 0
    Вы можете просто принять это как ответ :)
Показать ещё 1 комментарий
0

Используйте preg_replace_callback():

$str = preg_replace_callback(
           $pattern,
           function (array $matches) use ($month) {
              return $matches[3].'.'.$month[$matches[2]-1].' '.$matches[1];
           },
           $str
       );
0

Попробуйте этот рабочий пример, он даст вам желаемый результат

    //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;
  • 0
    А как насчет даты 2014-05-15 ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню