为什么str替换只能在第一次匹配?

时间:2012-05-19 13:44:55

标签: php css preg-replace preg-match str-replace

我的代码:

$css=".class1{
    padding:1330px 2220px 0 auto;
    padding:10px auto 0 20px;
    padding:101px auto 0 200px;
}";

$search=self::extract_unit($css,"padding:",";"); 

extract_unit:此函数提取[padding:]和[;]

之间的内容

将返回1330px auto 0 2220px

$replace=self::resort_padding_margin($search);

resort_padding_margin:此函数调整内容

将返回1330px 2220px 0 auto

$css = str_replace($search, $replace, $css);
echo $css;

当我应用此代码时,结果将显示如下:

.class1{
    padding:1330px auto 0 2220px;
    padding:10px auto 0 20px;
    padding:101px auto 0 200px;
}

那么如何使用此方法将所有填充应用于此类

.class1{
    padding:1330px auto 0 2220px;
    padding:10px 20px 0 auto;
    padding:101px 200px 0 auto;
}

1 个答案:

答案 0 :(得分:2)

要使其正常工作,您的self::extract_unit方法必须返回一个数组,每次出现padding一个项目。

然后你的self::resort_padding_margin应该接受搜索数组并返回另一个带有修改的数组。或者,在主代码中编写一个循环,并将每个调用的结果存储在数组中。

完成后,您可以将两个数组都传递给str_replace

顺便说一句,CSS应该只有一个padding定义。你有三个,这有点奇怪:)