我想用字符串中的一些数字替换该数字指向的位置中的数组内容。
例如,将“Hello 1 you are great”替换为“Hello myarray [1]你很棒”
我正在做下一个:preg_replace('/(\d+)/','VALUE: ' . $array[$1],$string);
但它不起作用。我怎么能这样做?
答案 0 :(得分: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's solution,因为它提供了更少的机会来搞砸逻辑。
答案 1 :(得分: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.
只提供问题的另一种解决方案:)
答案 2 :(得分: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);
}
答案 3 :(得分: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