Синтаксический анализатор printf для PHP / Codeigniter? - PullRequest
2 голосов
/ 22 июня 2010

Используя PHP и / или Codeigniter, я хочу создать несколько строковых шаблонов для хранения в базе данных, чтобы позже их можно было использовать для распечатки оператора customize.

Например, я хочусохраните это "hello %s! you are the %d visitor." в моей базе данных, чтобы позже я мог вставить имя и номер, чтобы распечатать это сообщение "hello bob! you are the 100 visitor".

Есть ли какие-либо доступные функции, чтобы легко это сделать, или мне придется написать свойсобственный скрипт с использованием preg_match / preg_replace?


Это работает:

<?

$test = 'hello %s';
$name = 'bob';
printf( $test, $name );

?>

Подробнее: http://php.net/manual/en/function.printf.php

Ответы [ 3 ]

4 голосов
/ 22 июня 2010

вы можете использовать sprintf, но вам всегда нужно знать точный порядок, в котором шаблон должен передавать свои аргументы. Я бы предложил что-то более похожее на

// this works only on php 5.3 and up
function sformat($template, array $params)
{
    return str_replace(
        array_map(
            function($key)
            {
             return '{'.$key.'}';
            }, array_keys($params)), 
        array_values($params), $template);
}

// or in the case of a php version < 5.3
function sformat($template, array $params)
{
    $output = $template;
    foreach($params as $key => $value)
    {
        $output = str_replace('{'.$key.'}', $value, $output);
    }
    return $output;
}



echo sformat('Hello, {what}!', array('what' => 'World'));

// outputs: "Hello, World!"
3 голосов
/ 22 июня 2010

вы можете использовать любую из * printf () функций семейства

0 голосов
/ 22 июня 2010

Если вы используете CI, вам лучше хранить строки в языковом файле.

http://codeigniter.com/user_guide/libraries/language.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...