2

少し前に、配列の並べ替えに関するスレッドを調べたところ、次のことがわかりました。

public function sortList(&$objects, $on, $order = 'ASC') {
    $comparer = ($order === 'DESC') 
    ? "return -strcmp(\$a->{$on},\$b->{$on});" 
    : "return strcmp(\$a->{$on},\$b->{$on});"; 
usort($objects, create_function('$a,$b', $comparer)); 
return $objects;
}

上記のコードは正常に動作します。唯一の問題は、大文字と小文字が区別されることですが、大文字と小文字を区別しないようにしたいと考えています。全体を書き直さなくても可能でしょうか?

4

2 に答える 2

0

使用する答えstrcasecmp()は既に与えられていますが、適切なクロージャを使用することで関数をよりきれいにすることができます:

public function sortList(array &$objects, $on, $order = 'ASC') 
{
    $multiplier = $order == 'ASC' ? 1 : -1;

    usort($objects, function($a, $b) use ($on, $multiplier) {
        return $multiplier * strcasecmp($a->{$on}, $b->{$on});
    });

    return $objects;
}
于 2014-02-05T06:49:09.363 に答える