This is a ? ?.
1文字の複数の文字を変数の配列に置き換えるにはどうすればいいですか?
私は上記の文字列を持っています。
私はPHPでこれを実現するにはどうすればよいThis is a test phrase.
:最終的な結果について
array('test', 'phrase');
:私は、この配列の変数と疑問符を交換したいですか?これについて
This is a ? ?.
1文字の複数の文字を変数の配列に置き換えるにはどうすればいいですか?
私は上記の文字列を持っています。
私はPHPでこれを実現するにはどうすればよいThis is a test phrase.
:最終的な結果について
array('test', 'phrase');
:私は、この配列の変数と疑問符を交換したいですか?これについて
あなたはvsprintfを使用することができます?
vsprintf("This is a %s %s.", array("test", "phrase")); // "This is a test phrase."
あなたが唯一持っている場合は、代わりに? %s:
$str = "This is a ? ?.";
vsprintf(str_replace("?", "%s", $str), array("test", "phrase"));
方法:
$str = 'This is a ? ?.';
$replacement = array('test', 'phrase');
foreach ($replacement as $word) {
if (($pos = strpos($str, '?')) !== false) {
$str = substr_replace($str, $word, $pos, 1);
}
}
var_dump($str);
ここでは非常に簡潔なソリューションです:
$in = 'This is a ? ?.';
$ar = array('test', 'phrase');
foreach ($ar as $rep)
$in = implode($rep, explode('?', $in, 2));
$in
は今、最終的な文字列です。
コメント:
'?'
置換を入れいつも機能する関数を書くのはどれくらい難しいですか?これまでの投稿の答えのすべてが、次の入力文字列と置換値に対して誤った結果が得られます:
$in="This i%s my ? input ? string";
$replace=array("jo%shn?",3);
ワンしばしば見過ごさ問題は、入力文字列を変更した場合、元の入力パターンを含む置換値があるかもしれないということです再び置き換えられました。これを解決するには、新しい文字列をすべて作成する必要があります。また、sprintfの解決法では、入力文字列に '%s'が含まれていないと誤った仮定をしています。元のポスターはそのようなことは一度も言わなかったので、 '%s'は残しておくべきです。
代わりにこの機能をお試しください。それは最も速くないか、最も洗練された解決策ではないかもしれませんが、少なくとも入力に関係なく、賢明な(ああ)出力結果を提供します。
function replace_questionmarks($in,$replace)
{
$out="";
$x=0;
foreach (explode("?",$in) as $part)
{
$out.=$part;
$out.=$replace[$x++];
}
return $out;
}
$in="This i%s my ? input ? string";
$replace=array("jo%shn?",3);
print replace_questionmarks($in,$replace);
出力:
This i%s my jo%shn? input 3 string
ザ・OPは、 "どのように私は、変数の配列に* *単一の文字の複数の出現を置き換えることができますか?"、尋ねました。 'vsprintf'は書式指定子(少なくとも2文字で、そのうちの1つは'% 'です)を置き換えるものです。 –
@Delan Azabani:正確に 'これは%s%sです。 '文字列を得るには'?'を '%s'に置き換えるのは難しくありません。 – zerkms
vsprintfに感謝します。挑戦的に最も単純な答え。 – ATLChris