短い答え:
このための既存のライブラリはありますか?
いいえ、私が知っているのは、この「すぐに使える」ものではありません。
または、これを支援する便利なライブラリはありますか?
はい、ありjson_decode
ますuksort
:
$specificity = function($selector) {
/*
* @link http://www.w3.org/TR/selectors/#specificity
*
* 9. Calculating a selector's specificity
*
* A selector's specificity is calculated as follows:
*
* * count the number of ID selectors in the selector (= a)
* * count the number of class selectors, attributes selectors, and
* pseudo-classes in the selector (= b)
* * count the number of type selectors and pseudo-elements in the
* selector (= c)
* * ignore the universal selector
*
* Selectors inside the negation pseudo-class are counted like any other,
* but the negation itself does not count as a pseudo-class.
*
* Concatenating the three numbers a-b-c (in a number system with a large
* base) gives the specificity.
*/
...
return (int) $result;
}
$compare = function($a, $b) use ($specificity) {
return $specificity($a) - $specificity($b)
};
$array = json_decode('{"yours" : "json"}', true);
uksort($array, $compare);
echo json_encode((object) $array);
このコード例が示すように、コメントで特異度を計算する方法を説明するだけで、コードは含まれていません。これは、そのコードを手元に持っていないためですが、これがどのように行われるかを仕様に入れました (少なくとも CSS 3 の場合)。
CSS セレクター パーサーを探しているなら、私は XDOM について知っています (私が書いたからです)。github で入手できます: https://github.com/hakre/XDOM - 100% CSS 3 互換の CSS セレクター パーサーです。
私の知る限り、既製のソリューションに関して、今日の時点で得られるもののほとんどはこれです。私が知っている他のすべての CSS セレクター パーサーは、W3C 仕様に準拠していないため、CSS 3 標準と完全には互換性がありません。これはあなたにとって良いかもしれません: 厳密な CSS3 互換性を必要としない場合は、ニーズに合った他のコード チャンクが既に見つかるかもしれません。