-1

こんにちは私は次の機能を持っています:

foreach($array_1 as &$arr){
usort($arr,"cmp");
}

function cmp($a, $b) {
    if ($a[2] == $b[2]) {
    return 0;
    }
    return ($a[2] < $b[2]) ? -1 : 1;
}

このようにすると機能しますが、2の代わりに変数(== 2)と数値を入力すると、関数は機能しません。これはなぜですか、どうすれば回避できますか?変数入力に基づいて配列をソートするために数値を変更できるようにしたいと思います。

動作しないコードは次のとおりです。

$type = 2;
foreach($array_1 as &$arr){
usort($arr,"cmp");
}

function cmp($a, $b) {
    if ($a[$type] == $b[$type]) {
    return 0;
    }
    return ($a[$type] < $b[$type]) ? -1 : 1;
}
4

1 に答える 1

3

うまくいけば使用すべきPHP5.3+の場合、解決策はクロージャを使用するだけです。

$index = 2;

foreach ($array_1 as &$arr) {
    usort($arr, function ($a, $b) use ($index) {
        return $a[$index] - $b[$index];
    });
}

PHP 5.2-の場合、global変数(YUCK !!)またはクラスを使用できます。

class Sort {

    protected $index;

    public function __construct($index) {
        $this->index = $index;
    }

    public function compare($a, $b) {
        return $a[$this->index] - $b[$this->index];
    }

}

$index = 2;

foreach ($array_1 as &$arr) {
    usort($arr, array(new Sort($index), 'compare'));
}
于 2013-03-20T10:27:02.277 に答える