0

基本的に、巨大なforeachステートメントにあるPHP関数があり、ループからの値を使用するため、そのforeachに含める必要があります。

foreach ($x as $y) {

..。

            function sortq($a, $b){
                if ((int)$a->id == (int)$b->id) {
                    return 0;
                }
                return ((int)$a->id < (int)$b->id) ? -1 : 1;
            }

            usort($sort, 'sortq');

..。

}

この関数をジェネリッククラスまたはメソッドに分解して、何度でも呼び出すことができるようにするにはどうすればよいですか?'class'ルートを試しましたが、foreachループでクラスを再宣言していました:D

助けてください!どうもありがとう

4

1 に答える 1

1

function_existsチェックで関数定義をラップすると機能します。

if (!function_exists('sortq')) {
    function sortq($a, $b) { ... }
}

少なくともPHP5.3以降を使用できる場合は、クロージャを使用する必要があります。

usort($sort, function($a, $b) {
    if ((int)$a->id == (int)$b->id) {
        return 0;
    }
    return ((int)$a->id < (int)$b->id) ? -1 : 1;
});

編集:実際、usortに必要な比較関数の定義は次のように述べています。

比較関数は、最初の引数がそれぞれ2番目の引数よりも小さい、等しい、または大きいと見なされる場合、ゼロより小さい、等しい、またはより大きい整数を返す必要があります。

したがって、その関数を次のように単純化できます。

function ($a, $b) { return (int)$a->id - (int)$b->id; }
于 2011-12-06T17:57:58.933 に答える