Подтвердить что ты не робот

С# String.Format() Эквивалент в PHP?

Я создаю довольно большое выражение поиска Lucene.NET. Есть ли способ передовой практики замены строк в PHP? Это не должно быть так, но я надеюсь на что-то похожее на метод С# String.Format.

Вот какая логика будет выглядеть на С#.

var filter = "content:{0} title:{0}^4.0 path.title:{0}^4.0 description:{0} ...";

filter = String.Format(filter, "Cheese");

Есть ли эквивалент PHP5?

4b9b3361

Ответ 1

Вы можете использовать функцию sprintf:

$filter = "content:%1$s title:%1$s^4.0 path.title:%1$s^4.0 description:%1$s ...";
$filter = sprintf($filter, "Cheese");

Или вы пишете свою собственную функцию, чтобы заменить { i } на соответствующий аргумент:

function format() {
    $args = func_get_args();
    if (count($args) == 0) {
        return;
    }
    if (count($args) == 1) {
        return $args[0];
    }
    $str = array_shift($args);
    $str = preg_replace_callback('/\\{(0|[1-9]\\d*)\\}/', create_function('$match', '$args = '.var_export($args, true).'; return isset($args[$match[1]]) ? $args[$match[1]] : $match[0];'), $str);
    return $str;
}

Ответ 3

попробуйте это, если есть ошибка или 'create_function'

public static function format()
{
    $args = func_get_args();
    $format = array_shift($args);

    preg_match_all('/(?=\{)\{(\d+)\}(?!\})/', $format, $matches, PREG_OFFSET_CAPTURE);
    $offset = 0;
    foreach ($matches[1] as $data) {
        $i = $data[0];
        $format = substr_replace($format, @$args[$i], $offset + $data[1] - 1, 2 + strlen($i));
        $offset += strlen(@$args[$i]) - 2 - strlen($i);
    }

    return $format;
}

Я нашел это из здесь