問題:
PHPを使用して、変数内の文字列を多数の異なる文字列に追加する方法を理解することに行き詰まっています。
変数:
$insert = 'icon-white';
文字列は $hyperlink という変数にあります。
$hyperlink = '<i class="icon-home"></i>';
望ましい出力:
<i class="icon-home icon-white"></i>
任意の推奨事項を歓迎します。事前に感謝します。
問題:
PHPを使用して、変数内の文字列を多数の異なる文字列に追加する方法を理解することに行き詰まっています。
変数:
$insert = 'icon-white';
文字列は $hyperlink という変数にあります。
$hyperlink = '<i class="icon-home"></i>';
望ましい出力:
<i class="icon-home icon-white"></i>
任意の推奨事項を歓迎します。事前に感謝します。
正直なところ、この特定の質問では正規表現の利点がわかりません。そのため、その側面を無視することにしました。主な関心事は、最後の文字の前に新しい文字列を挿入することであると思われます"
。これは、次の方法で実現できます。
$hyperlink = '<i class="icon-home"></i>';
$insert = ' icon-white'; // I've explicitly prefixed the new string with a space
$pos = strripos($hyperlink,'"',0);
echo substr_replace($hyperlink,$insert,$pos,0)
$new
将来の使用のために、指定された文字列 ( ) を別の文字列 ( $haystack
) に最後に出現する文字 ( ) の前に挿入する関数を次に示します$needle
。
function insertBeforeLast($haystack,$needle,$new){
if (!$haystack || !$needle || !$new){
return false;
}
else {
return substr_replace($haystack,$new,strripos($haystack,$needle),0);
}
}
echo insertBeforeLast('abcdefg','e','12',' ');
0
関数内の閉じ括弧の前のsubstr_replace()
は、新しく挿入された文字列が元の文字列で上書きする文字数を示します。
オプションとして上書きを明示的に提供するように上記の関数を修正するために編集されました。
function insertBeforeLast($haystack,$needle,$new, $over){
if (!$haystack || !$needle || !$new){
return false;
}
else {
$over = $over || 0;
return substr_replace($haystack,$new,strripos($haystack,$needle),$over);
}
}
echo insertBeforeLast('abcdefg','e','12',0);
参考文献:
これはpreg_replace()
、ニーズに合わせてphp関数を使用する方法です:
$ php -a
Interactive shell
php > $oldvar = '<i class="icon-home"></i>';
php > $newvar = preg_replace('/(.*?".*?)"(.*)/', '\1 icon-white"\2 ', $oldvar);
php > echo $newvar;
<i class="icon-home icon-white"></i>
出力をレンダリングするときに、次のことができます。
<i class="icon-home <?= $insert ?>"></i>
条件付きにしたくない場合。
変数がある場合。
$i = '<i class="icon-home"></i>';
できるよ;
$i = '<i class="icon-home ${insert}"></i>';