PHP で Python のように指定子に名前を付ける方法はありますか?
PHPでこれが欲しい:
$foo = array('name' => 24);
printf("%(name)d", $foo);
Googleまたはphpマニュアルに関連するものは何も見つかりませんでした。
PHP で Python のように指定子に名前を付ける方法はありますか?
PHPでこれが欲しい:
$foo = array('name' => 24);
printf("%(name)d", $foo);
Googleまたはphpマニュアルに関連するものは何も見つかりませんでした。
いい質問です!
正規表現を使用することで、それほど問題なく独自のロールを作成できます。を呼び出すという考えに基づいて実装を行いました。これは、組み込み関数ファミリのvsprintf
中で宣言された目標に最も近いものです。printf
function vsprintf_named($format, $args) {
$names = preg_match_all('/%\((.*?)\)/', $format, $matches, PREG_SET_ORDER);
$values = array();
foreach($matches as $match) {
$values[] = $args[$match[1]];
}
$format = preg_replace('/%\((.*?)\)/', '%', $format);
return vsprintf($format, $values);
}
テストする:
$foo = array('age' => 5, 'name' => 'john');
echo vsprintf_named("%(name)s is %(age)02d", $foo);
更新:私の最初の実装は非常にラムダ式でした。非常に基本的なforeach
もので十分であることが判明しました。これにより、関数は PHP >= 4.1 でも使用できるようになります (特定のバージョンについて 100% 確信があるわけではありませんが、そこにあるはずです)。
sprintf
次のように、パラメーターに番号を付けることでそれを行うことができます。
echo sprintf('hello, %2$s. What is your %1$s', 'age', 'Jesse');
次の文字列を出力します。
こんにちは、ジェシー。あなたは何歳ですか
より近いコア機能はvsprintf()
、複数のパラメーターの代わりに配列を使用することですが、それでも番号付きパラメーターを使用する必要があります。
この関数ドキュメントのコメントには、あなたが望むことを行う関数を作成した人がいますvnsprintf() printf+array+named parameters