1

我有一个从 mysql 返回的字段值作为样式标记。

例子:

$data_style = "position:absolute; top:0px; left:700px; width:500px; height:400px; vertical-align: top; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; display: list-item;"

我需要即时更改以下 4 个“数字”值...

top:0px; left:700px; width:500px; height:400px;

在 PHP 中执行此操作的最佳方法是什么?

4

3 回答 3

1

单个preg_replace调用可以使用数组作为模式和替换来做到这一点:

$data_style = "position:absolute; top:0px; left:700px; width:500px; height:400px;
 vertical-align: top; padding-top: 0px; padding-right: 0px; padding-bottom: 0px;
 padding-left: 0px; display: list-item;";

$patterns = array('/(top\s*:\s*)\d+(px)/', '/(left\s*:\s*)\d+(px)/', 
                  '/(width\s*:\s*)\d+(px)/', '/(height\s*:\s*)\d+(px)/');
$replacements = array('${1}10${2}', '${1}500${2}', '${1}300${2}', '${1}450${2}');

$data_style = preg_replace($patterns, $replacements, $data_style);
echo $data_style;

输出:

position:absolute; top:10px; left:500px; width:300px; height:450px;
vertical-align: top; padding-top: 10px; padding-right: 0px; padding-bottom: 0px;
padding-left: 500px; display: list-item;
于 2013-09-10T15:53:21.060 回答
0

我会将样式字符串转换为关联数组,explode用于将其拆分为分号,然后array_mapexplode元素拆分为冒号。然后我会更新需要更改的元素,并将其重新组合成样式字符串。

有关执行字符串-> 关联数组转换的函数,请参见我的答案,尽管它使用逗号而不是分号作为主要分隔符。

于 2013-09-10T15:54:46.077 回答
0

放入紧凑的代码中,这或多或少是 Barmar 建议的:

$st="position:absolute; top:0px; left:700px; width:500px; height:400px; vertical-align: top; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; display: list-item;";
// turn $st into into an associative array:
$tmp=preg_split('/\s*;\s*/',$st);$a=array();
foreach ($tmp as $v) {$v=preg_split('/\s*:\s*/',$v);if (count($v)>1) $a[$v[0]]=$v[1];}

// apply changes to individual elements of array ...
$a['top']="234px";
$a['left']="345px";
$a['width']="456px";
$a['height']="567px";

// convert $a-elements back into string:
foreach ($a as $k => &$v) $v="$k: $v";
// join all the elements and show result
echo join("; ",$a).";";
于 2013-09-10T16:31:23.237 回答