Приветствую всех. Сайт переезжает на PHP7. В связи с тем, что модификатор /e уже не актуален, надо поменять preg_replace на preg_replace_callback. Помогите, плиз. Не могу понять, как правильно написать callback-функцию. Так как надо не работает. Вот этот кусок кода: PHP: $find = ['/{id}/i', '/{name}/i', '/{parent}/i', '/{level}/i', '/{url}/i', '/{icon}/i', '/{template}/i', '/{prefix}/i', '/\[php\](.*?)\[\/php\]/ie', '/{description}/i']; $repl = [$row['id'], $row['name'], $row['parent'], $row['level'], $row['url'], ($row['icon'] ? '<img src="'.$row['icon'].'" alt="'.$row['icon'].'" border="0" align="absmiddle">' : ''), $row['template'], $pref, '\\1', replace_news('show', $row['description'])]; $johnny_left_teat .= $pref . @preg_replace ($find, $repl, $tpl); Вся функция полностью вот. Выводит дерево категорий сайта. Спойлер PHP: function category_get_tree($prefix = '', $tpl = '{name}', $no_prefix = true, $id = 0){ global $categories; $minus = 0; $johnny_left_teat = ''; if (empty($categories)){ return false; } foreach (sort_it($categories) as $row){ if ($id){ if ($id == $row['id']){ $minus++; continue; } if (!in_array($row['id'], explode(',', category_get_children($id)))){ $minus++; continue; } } $pref = ($no_prefix ? $row['level'] : ($row['level'] + 1)); $pref = ($minus ? ($pref - (!$no_prefix ? ($minus - 1) : ($minus - 1))) : $pref); $pref = @str_repeat($prefix, $pref); $find = ['/{id}/i', '/{name}/i', '/{parent}/i', '/{level}/i', '/{url}/i', '/{icon}/i', '/{template}/i', '/{prefix}/i', '/\[php\](.*?)\[\/php\]/ie', '/{description}/i']; $repl = [$row['id'], $row['name'], $row['parent'], $row['level'], $row['url'], ($row['icon'] ? '<img src="'.$row['icon'].'" alt="'.$row['icon'].'" border="0" align="absmiddle">' : ''), $row['template'], $pref, '\\1', replace_news('show', $row['description'])]; $johnny_left_teat .= $pref . @preg_replace ($find, $repl, $tpl); } return $johnny_left_teat; }
Символ собачки попробуй убрать. Говорят, его лучше вообще не использовать. Я так полагаю preg_replace работает, но не так как тебе хочется. Какой результат ($johny_left_teat) сейчас и какой нужен?
Спс за ответ. Результатом были пустые значения вместо параметров категорий (id, name, url...). Вчера переписали вывод категорий наново, сделали совсем по-другому. Так что, в принципе тема уже не актуальна. Хотя ради любопытства было бы интересно узнать, как правильно задать preg_replace_callback в указанном мной выше коде. Я пробовал что-то типа такого PHP: johnny_left_teat .= $pref . preg_replace_callback( $find, function ($repl) {return $repl[0];}, $tpl ) ); и не работало. Как нужно?