使用preg_replace_callback对属性进行排序

时间:2014-03-22 00:07:38

标签: php css function explode preg-replace-callback

所以...所有属性都已经完美排序

BUT

如何将它们替换(/合并)到原始的$ css值?

这段代码几乎是自我解释的,但我已经添加了我希望得到的东西,以防万一...这里需要小的调整:)

<?php

function mySort($arr) {

    $arr = explode( ";" , $arr);
    sort($arr);
    array_shift($arr);

    $returnMe = NULL;

    foreach ($arr as $key) {
        $returnMe .= $key.';';
    }

unset($arr);

    return $returnMe."\r\n";

}

$css = <<<EOF

body {
z-index:9;
padding:0;
margin:0;
line-height:10px;
}

p {
z-index: 9;
font-size: 10px;
}

h1,h2,h3,h4,h5,h6 {
z-index: 2;
padding: 0;
margin: 0;
font-size: 100%;
border: 0 none;
}

EOF;


echo '<pre>'.
    preg_replace_callback( '~.*?{(.*?)}~s',
        function ($match) {
            return mySort( $match[1] );
            }
        ,$css )
    .'</pre>';

我期待得到:

body {
line-height:10px;
margin:0;
padding:0;
z-index:9;
}

p {
font-size: 10px;
z-index: 9;
}

h1,h2,h3,h4,h5,h6 {
border: 0 none;
font-size: 100%;
margin: 0;
padding: 0;
z-index: 2;
}

1 个答案:

答案 0 :(得分:0)

您正在匹配CSS选择器,但不会将其添加回返回的值 - 它只是被回调函数替换

所以你需要做的就是捕获这些部分,并从回调中返回它们,如下所示:

echo '<pre>'. preg_replace_callback( '~(.*?{)(.*?)(})~s', function ($match) { return $match[1] . mySort( $match[2] ) . $match[3]; } ,$css ) .'</pre>';