2

文字列内のいくつかの数字を、この数字が指す位置にある配列の内容に置き換えたいと思います。

たとえば、 「He​​llo 1 you are great」「Hello myarray[1] you are great」に置き換えます。

私は次のことをしていました:preg_replace('/(\d+)/','VALUE: ' . $array[$1],$string);

しかし、うまくいきません。どうすればできますか?

4

4 に答える 4

6

コールバックを使用する必要があります。

<?php
$str = 'Hello, 1!';
$replacements = array(
    1 => 'world'
);
$str = preg_replace_callback('/(\d+)/', function($matches) use($replacements) {
    if (array_key_exists($matches[0], $replacements)) {
        return $replacements[$matches[0]];
    } else {
        return $matches[0];
    }
}, $str);
var_dump($str); // 'Hello, world!'

コールバックを使用しているため、実際に数値を使用したい場合は、文字列を{1}の代わりに または 何かとしてエンコードすることをお勧めします1。変更された一致パターンを使用できます。

<?php
// added braces to match
$str = 'Hello, {1}!';
$replacements = array(
    1 => 'world'
);

// added braces to regex
$str = preg_replace_callback('/\{(\d+)\}/', function($matches) use($replacements) {
    if (array_key_exists($matches[1], $replacements)) {
        return $replacements[$matches[1]];
    } else {
        // leave string as-is, with braces
        return $matches[0];
    }
}, $str);
var_dump($str); // 'Hello, world!'

ただし、既知の文字列を常に照合する場合は、ロジックを台無しにする機会が少ないため、@ChrisCooney のソリューションを使用することをお勧めします。

于 2013-02-25T15:37:29.270 に答える
2

他の答えは完全に問題ありません。私はそれをこのように管理しました:

    $val = "Chris is 0";
    // Initialise with index.
    $adj = array("Fun", "Awesome", "Stupid");
    // Create array of replacements.
    $pattern = '!\d+!';
    // Create regular expression.
    preg_match($pattern, $val, $matches);
    // Get matches with the regular expression.
    echo preg_replace($pattern, $adj[$matches[0]], $val);
    // Replace number with first match found.

問題に対する別の解決策を提供するだけです:)

于 2013-02-25T15:48:37.077 に答える
0
$string = "Hello 1 you are great";
$replacements = array(1 => 'I think');

preg_match('/\s(\d)\s/', $string, $matches);

foreach($matches as $key => $match) {
  // skip full pattern match
  if(!$key) {
    continue;
  }
  $string = str_replace($match, $replacements[$match], $string);
}
于 2013-02-25T15:48:00.660 に答える
0
<?php
$array = array( 2 => '**', 3 => '***');
$string = 'lets test for number 2 and see 3 the result';
echo preg_replace_callback('/(\d+)/', 'replaceNumber', $string);

function replaceNumber($matches){
 global $array;
 return $array[$matches[0]];
}
?>

出力

lets test for number ** and see *** the result
于 2013-02-25T15:48:17.207 に答える