2012-03-17 12 views
0

1文字以上の文字列を変更することが可能かどうか疑問です。PHP:1文字以上の文字列内の文字を変更することは可能ですか?

<? 
$string = abcde; 
echo "character 2: ". $string[2] . "\n"; 
$string[2] = "X"; 
echo "character 2: ". $string[2] . "\n"; 
$string[2] = "moreThanOneChar"; 
echo "character 2: ". $string[2] . "\n"; 
echo "whole string: $string"; 
?> 

が出力:

character 2: c 
character 2: X 
character 2: m  
whole string: abmde // <-- This should be abmoreThanOneCharde 

http://codepad.org/e2dDkH37

+0

文字列インデクサー($ string [2])を使用している場合、インタープリターに文字列の2番目の文字を参照するように指示します。これは1文字です。同様に、このインデクサに値を設定するときは、1文字しか設定できません。したがって、文字列置換関数が必要です。 –

答えて

1

あなたは、正規表現(regex)代替メカニズム使用してこの問題を解決することができます:ここに私の失敗した試みだ

$string = preg_replace('/X/', 'moreThanOneChar', $string); 

注;ただし、これは 'X'のすべてのインスタンスを 'moreThanOneChar'に置き換えます。これは簡単にフレーズを交換するために拡張することができ

$string = preg_replace('/X/', 'moreThanOneChar', $string, 1); 

$string = 'Hello, man!'; 
$string = preg_replace('/man/', 'person', $string); 

echo $string; 

出力:

あなたは初回のみにこれを制限したい場合は、第四パラメータとしての限界を渡すことができます
Hello, person! 

レビューの詳細についてpreg_replaceコマンド:

から

+0

文字列内のすべての一致を置き換えませんか? 3文字を置換しようとすると、文字列 "popeye"を意味します。文字列内のすべての "p"を実際に置換しているわけではありません。 –

+0

これは、指定した数だけ一致します。これはデフォルトですべてのものですが、4番目のパラメータで制限を設定できます。 –

2
function replaceInString($str, $pos, $substring) 
{ 
    $part1 = substr($str, 0, -$pos); 
    $part2 = substr($str, -$pos + 1); 
    return $part1 . $substring . $part2; 
} 
1

PHPの文字列をバイト配列とバッファの長さを示す整数として実装されます。

したがって、文字列は文字の配列のように扱うことができますが、各要素を新しいデータ型に変更できる他のタイプの配列と同じではありません。 「文字列配列」の各要素は、常に1バイトの文字になります。

PHPに「この3番目の文字を他の文字列にする」と言うと、PHPは「okですが、新しい文字列の最初の文字のみを使用します」と応答します。

編集

他の回答を見た後いくつかの明確化。あなたの質問は、変更後の場所で文字にアクセスし続けたいという意味になりました。例えば

$string = 'abcde'; 
echo $string[2]; //echoes c 
$string[2] = 'fghi'; 
echo $string[2]: //echoes fghi 

これは単にあなたが記述方法では不可能です。

このような機能が本当に必要な場合は、convert the string to an array of charactersを実行してから、配列要素を操作してください。

関連する問題