为什么 str 替换仅在第一个匹配中起作用


Why str replace worked in first matched only?

我的代码:

$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:此函数提取 [填充:] 和 [;] 之间的内容

将返回 1330px 自动 0 2220px

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

resort_padding_margin:此功能对内容进行重游

将返回 1330px 2220px 0 自动

$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;
}

为此,您的self::extract_unit方法必须返回一个数组,每次出现padding一个项目。

然后,您的self::resort_padding_margin应该接受搜索数组并返回另一个包含修改的数组。或者,在主代码中编写一个循环,并将对此方法的每次调用的结果存储在数组中。

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

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

相关文章: