自定義規則排序數組的一個例子

/**
 * Author:[email protected]
 * My blog:http://blog.teamhaka.com 
 *

*/


需求:對css文件中內容的排列進行調整

/* 待排序的字符串 */
$css_str = <<< HTML
a{background-color:#fff}
form{font-size:15px;}
p{color:red}
body{background-image:url(1.png);}
HTML;

希望的順序:

$css_str = <<< HTML

body{background-image:url(1.png);}
p{color:red}
a{background-color:#fff}
form{font-size:15px;}

HTML;

代碼:

$tmp = split(“[\r\n]+”, $css_str); //轉換成數組(待排序的數組)

/* 確定排序規則(包含html的應該排在包含body的前面,當然後面也行) */
$arr_sort_rule = array(‘html’, ‘body’, ‘p’, ‘a’, ’span’, ‘form’);

foreach($tmp as $v){
   $r[] = array_search(preg_replace(‘/(\w+).*/is’, ‘$1′, $v), $arr_sort_rule);
   /***********************
      $a = preg_replace(‘/(\w+).*/is’, ‘$1′, $v);//提取$css_str中每一行剛開頭的字符串
      array_search($a, $arr_sort_rule);//在排序規則數組中,查找$a,找到則返回排序規則數組中所對應的鍵
   這樣$r這個數組中的值就是一串數字了。
   ************************/
}
array_multisort($r, $tmp); //對$r的值進行排序的同時,將$tmp數組的值也一併排序(可以參見array_multisort函數), 從而達到按自定義的$r規則排序數組$tmp

echo join(PHP_EOL, $tmp);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章