Php 使用preg\u replace\u回调对属性进行排序

Php 使用preg\u replace\u回调对属性进行排序,php,css,function,explode,preg-replace-callback,Php,Css,Function,Explode,Preg Replace Callback,所以。。。所有属性都已完全排序 但是 如何将它们替换(/merge)回原来的$css值 这段代码几乎是不言自明的,但我已经添加了我希望得到的东西,以防。。。此处需要进行小调整:) 您正在匹配CSS选择器,但没有将其添加回返回值中——它只是被回调函数替换 因此,您需要做的是捕获这些部分,并从回调中返回它们,如下所示: echo“”。 preg_replace_回调('~(.*?{)(.*?(})~s',函数($match){ 返回$match[1].mySort($match[2])。$match

所以。。。所有属性都已完全排序

但是

如何将它们替换(/merge)回原来的$css值

这段代码几乎是不言自明的,但我已经添加了我希望得到的东西,以防。。。此处需要进行小调整:)


您正在匹配CSS选择器,但没有将其添加回返回值中——它只是被回调函数替换

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

echo“”。
preg_replace_回调('~(.*?{)(.*?(})~s',函数($match){
返回$match[1].mySort($match[2])。$match[3];
}
,$css)

.'';

是的,我知道,这正是我要问的;)是的,但是$match[0]返回属性和cssI的未排序选择器。作为一个具体示例,我添加了一个代码片段,我不使用match[0],我单独捕获其他位并连接它们。Opps:)是的!你完全正确!!!棒 极 了非常感谢你!!!!
<?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;
}