str_replace只打印字符串的某个部分?

时间:2013-07-24 05:18:25

标签: php string str-replace

我遇到了一个问题。 我想只替换括号中的部分,但问题是如果括号中的值是1或同一部分中的其他东西([x(xxx:x:x)xx];),它最终会替换它,我需要每个部分末尾的x(值)。

[0(267:0:0)x1];[1(257:0:0)x1];[2(256:0:0)x1];[3(258:0:0)x1];[4(261:0:0)x1];   [5(262:0:0)x64];[6(320:0:0)x10];[7(17:0:0)x32];[8(295:0:0)x2];[9(35:0:0)x2];[10(44:1:1)x6];[11(0:0:0)x1];[12(0:0:0)x1];[13(0:0:0)x1];[14(0:0:0)x1];[15(0:0:0)x1];[16(0:0:0)x1];[17(0:0:0)x1];[18(0:0:0)x1];[19(0:0:0)x1];[20(0:0:0)x1];[21(0:0:0)x1];[22(0:0:0)x1];[23(0:0:0)x1];[24(0:0:0)x1];[25(0:0:0)x1];[26(0:0:0)x1];[27(0:0:0)x1];[28(0:0:0)x1];[29(0:0:0)x1];[30(0:0:0)x1];[31(0:0:0)x1];[32(0:0:0)x1];[33(0:0:0)x1];[34(0:0:0)x1];[35(0:0:0)x1];[103(0:0:0)x1];[102(0:0:0)x1];[101(0:0:0)x1];[100(0:0:0)x1];

我不能让这个工作。如果我尝试在括号中替换零件中的1值,它最终会改变打印部件上的所有1。

另请注意,括号中的零点并不总是0。

这是我试过的:

$items = $row['inventory'];
$test = str_replace('267', '<img href="../assets/images/items/iron_sword.png">', $items);
echo $items;

我只尝试了一行代码来了解它是如何工作的。

我正在尝试用图像替换括号中的部分(例如,第一个是[0(267:0:0)x1] ;.我想用(0)替换(267:0:0)图像...

1 个答案:

答案 0 :(得分:0)

如果要用同一图像替换所有( * :*:*)模式,则无法尝试preg_replace:

$str = "[0(267:0:0)x1];[1(257:0:0)x1];[2(256:0:0)x1];[3(258:0:0)x1];[4(261:0:0)x1];";
$res = preg_replace("/\(\d+\:\d+\:\d+\)/",'<img href="../assets/images/items/iron_sword.png">', $str);

您可以在此处查看结果:http://codepad.org/UIjGKv6n

如果您想用不同的图片替换不同的项目,那么您需要一个这样的翻译地图:

$from = array(
    '(267:0:0)',
    '(257:0:0)',
    ...
);
$to = array(
    '<img href="../assets/images/items/iron_sword.png">',
    '<img href="../assets/images/items/other.png">',
    ...
);
$res = str_replace($from, $to, $str);

如果您有其他要求,可以根据需要修改代码。