【问题标题】:Replace string with values from multidimensional array based on a key用基于键的多维数组中的值替换字符串
【发布时间】:2025-12-29 06:50:06
【问题描述】:

我有一个将多个数字存储为字符串的变量:

$string = "1, 2, 3, 5";

以及具有其他存储值的多维数组:

$ar[1] = array('title#1', 'filename#1');
$ar[2] = array('title#2', 'filename#2');
$ar[3] = array('title#3', 'filename#3');
$ar[4] = array('title#4', 'filename#4');
$ar[5] = array('title#5', 'filename#5');

我的目标是根据关联的数组键将$string 中的数字替换为$ar 数组中的相关图块。对于上面的示例,我应该得到:

$string = "title#1, title#2, title#3, title#5";

我尝试遍历$ar 并在$string 上执行str_replace,但$string 的最终值始终是相关数组中的最新标题。

foreach($ar as $key => $arr){
  $newString = str_replace($string,$key,$arr[0]);
}

任何提示如何解决这个问题?

谢谢

【问题讨论】:

  • 哪一点是题外话?我遇到了一些我无法解决的问题(我的代码没有按预期工作)。

标签: php arrays string replace multidimensional-array


【解决方案1】:

你可以通过 str_replace 每次 concat 来完成,也可以通过 explode 和 concat 来完成。

像这样尝试:

$string = "1, 2, 3, 5";
$arrFromString = explode(',', $string);
$newString = '';
foreach($ar as $intKey => $arr){
    foreach($arrFromString as $intNumber){
        if($intKey == $intNumber) {
            $newString .= $arr[0].',';
        }
    }
}
$newString = rtrim($newString,',');
echo $newString;

输出:

title#1,title#2,title#3,title#5

live demo

【讨论】:

  • 好吧,在我的情况下,您的示例不是解决方案,因为您使用数组 $ar 中的值而不是该数组的键来获得正确的标题,顺便说一句,它可以是“产品标题”没有数字。
【解决方案2】:

您可以使用explode()implode() 函数将$string 中的数字作为数组并将标题分别组合成一个字符串:

$res = array();
foreach (explode(", ", $string) as $index) {
     array_push($res, $ar[$index][0]);
}
$string = implode(", ", $res);
print_r($string);

会给你

title#1, title#2, title#3, title#5;

【讨论】:

  • 需要一点点修改才能将结果作为字符串而不是数组,但在我的情况下也可以。谢谢!