使用str_replace()替换文本数据的几段中的值,似乎可以这样做,但是顺序很奇怪。替换的值位于硬编码数组中,而替换的值位于来自称为DBConnect()的自定义函数提供的查询的数组中。
我在两个上都使用了print_r()来验证它们是否正确,并且它们是:两者具有相同的条目数并且顺序相同,但是屏幕上的结果不匹配。我以为这很简单,并且认为str_replace()本身通常会处理该简单任务,因此不需要任何循环,但是我错过了什么吗?
$replace = array('[MyLocation]','[CustLocation]','[MilesInc]','[ExtraDoc]');
$replacements = DBConnect($sqlPrices,"select",$siteDB);
$PageText = str_replace($replace,$replacements,$PageText);
和$ replacements是:
Array
(
[0] => 25
[MyLocation] => 25
[1] => 45
[CustLocation] => 45
[2] => 10
[MilesInc] => 10
[3] => 10
[ExtraDoc] => 10
)
答案 0 :(得分:0)
一旦我看到了$ replacements数组的实际外观,就可以通过滤除数字键来修复它。
$replace = array('[MyLocation]','[CustLocation]','[MilesInc]','[ExtraDoc]');
$replacements = DBConnect($sqlPrices,"select",$siteDB);
foreach ($replacements as $key=>$value) :
if (!is_numeric($key)) $newArray[$key] = $value;
endforeach;
$PageText = str_replace($replace,$newArray,$PageText);
以前的$ replacements数组,过滤为$ newArray,看起来像这样:
Array
(
[MyLocation] => 25
[CustLocation] => 45
[MilesInc] => 10
[ExtraDoc] => 10
)
答案 1 :(得分:0)
-已编辑:删除了一些无意义的陈述-
@DonP,您想做的事情是可能的。
我认为strtr()
函数可能对您更有利。您需要像这样对代码进行一些调整...
<?php
$replacements = DBConnect($sqlPrices,"select",$siteDB);
$PageText = strtr($PageText, [
'[MyLocation]' => $replacements['MyLocation'],
'[CustLocation]' => $replacements['CustLocation'],
'[MilesInc]' => $replacements['MilesInc'],
'[ExtraDoc]' => $replacements['ExtraDoc'],
]);
?>
此代码有点冗长,需要编写重复的字符串。一旦了解了它的工作方式,就可以使用一些循环或数组函数对其进行重构。例如,您可以使用以下更紧凑的版本...
<?php
// Reference fields.
$fields = ['MyLocation', 'CustLocation', 'MilesInc', 'ExtraDoc'];
// Creating the replacement pairs.
$replacementPairs = [];
foreach($fields as $field){
$replacementPairs["[{$field}]"] = $replacements[$field];
}
// Perform the replacements.
$PageText = strtr($PageText, $replacementPairs);
?>