preg_replace не работает после обновления до PHP 5.4 - PullRequest
0 голосов
/ 16 февраля 2020

У меня проблема с preg_replace (). Я полагаю, что после обновления версии моего хоста PHP с 5.3 до 5.4.

Раньше код работал нормально, но теперь возникла проблема:

function update_comments($comments)
{
  if (!empty($comments) && is_array($comments)) {
    foreach ($comments as &$comment)
      update_comment(&$comment);
  }

  return $comments;
}

function update_comment($comment) {
$repl = '<a href="#">$0</a>';
$comment['comment'] = preg_replace('~#(\d+)~', $repl, $comment['comment']);
return $comment;
}

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 16 февраля 2020

Добро пожаловать в stackoverflow, Abid!

Можете ли вы добавить свой текущий вывод и ожидаемый вывод и, возможно, сообщение об ошибке? потому что я вижу, что вы используете время вызова по ссылке , которое было удалено в 5.4. (update_comment(&$comment)).

Я попытался запустить код и принял его, и я вижу, что после его изменения он работает нормально. Вот пример в декларативном и императивном способе сделать это.

function update_comments($comments)
{
    if (!empty($comments) && is_array($comments)) {
        foreach ($comments as $idx => $comment) {
            $comments[$idx] = update_comment($comment);
        }
    }

    return $comments;
}

и здесь в качестве декларативного примера

function update_comments($comments)
{
    if (!empty($comments) && is_array($comments)) {
        $comments = array_map(function ($comment) {
            return update_comment($comment);
        }, $comments);
    }

    return $comments;
}

Здесь пример того, как я использовал ваш код. Вы также можете возиться здесь с указанием c PHP версии: http://sandbox.onlinephpfunctions.com/code/10e616237c0c75c8e3520bdf5866040231879cde

$comments = update_comments([
    ['comment' => 'This is my #1 comment.'],
    ['comment' => 'This is my #2 comment.']
]);

print_r($comments);

// Array
// (
//     [0] => Array (
//             [comment] => This is my <a href="#">#1</a> comment.
//         )
// 
//     [1] => Array (
//             [comment] => This is my <a href="#">#2</a> comment.
//         )
// 
// )

Дайте мне знать, если это помогает или ваша проблема preg_replace() все еще существует .

...