2011-12-06 10 views
0

私は基本的に巨大なforeachステートメントにあるPHP関数を持っています。はそのループ内の値を使用するためforeachに入れる必要があります。私は何回でもそれを呼び出すことができるように、私はジェネリッククラスやメソッドに出て、この機能を削除するにはどうすればよい別の場所に移動して再宣言PHP関数の問題を止めるには

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'); 

...

} 

?私は 'クラス'ルートを試みましたが、foreachループでクラスを再宣言していました:D

助けてください!チェックが動作しますfunction_existsで関数定義をラッピング感謝

+0

は、あなたが他の機能/コントロールの外に移動しようとしたことがありますか? – jprofitt

+0

foreachから関数を移動しても、まだ動作している必要がありますか? – ajreal

+0

いいえ、ループの値は使用していません。 – Boann

答えて

1

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

あなたは、少なくともPHP 5.3+持つに依存することができた場合、あなたはclosureを使用する必要があります。

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

編集:実際には、が必要とする比較関数の定義は次のようになります。

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

ですから、その機能を簡素化することができますだけします

function ($a, $b) { return (int)$a->id - (int)$b->id; } 
関連する問題