艰难的str_replace,从sql替换部分结果

时间:2014-07-05 06:47:34

标签: php sql str-replace

我正在尝试从sql表中提取数据并使其显示图像。我有表中每个值的图像。

数据库中的RAW数据:

["NVGoggles"|"ItemMap"|"ItemCompass"|"ItemWatch"|"ACE_CharliePack_ACU_Medic"|"Binocular"|"ACRE_PRC148_ID_2"|"ACRE_PRC343_ID_7"|"CZ805_B_GL_ACR"]

这是游戏中的库存。

我想这样做,所以每个项目都是一个图像。

我试过这个:

$wea = str_replace('["', '<img src="admin/images/thumbs/', $row["wea"]) & str_replace('"|"', '.png</img><br><img src="admin/images/thumbs/', $row["wea"]) & str_replace('"]', '.png</img>', $row["wea"]);

我试过

$wea = str_replace('["', '<img src="admin/images/thumbs/', $row["wea"]);
$wea2 = str_replace('"|"', '.png</img><br><img src="admin/images/thumbs/', $wea);
$wea3 = str_replace('"]', '.png</img>', $wea2);

有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:4)

它几乎看起来像JSON编码,因此您可以应用一个小技巧将其转换为数组:

$items = json_decode(strtr($row["wea"], '|', ','), true);
$result = array_map(function($item) { 
    return sprintf('<img src="admin/images/thumbs/%s.png">', $item);
}, $items);

答案 1 :(得分:2)

正如我所说,你可以将项目作为数组获得:

explode('"|"', trim($str, ' []'))

但如果你想要自己的方式,那么正确的代码就是:

$wea = str_replace('["', '<img src="admin/images/thumbs/', $row["wea"]);
$wea2 = str_replace('"|"', '.png" /><br><img src="admin/images/thumbs/', $wea);
$wea3 = str_replace('"]', '.png" />', $wea2);

作为正确的html img标记是:

<img src="admin/images/thumbs/file.jpg" />

同样str_replace可以在一次调用中替换多个值:

$wea = str_replace(
    array('["', '"|"', '"]'),
    array(
        '<img src="admin/images/thumbs/',
        '.png" /><br><img src="admin/images/thumbs/',
        '.png" />',
    ),
    $row['wea']
);