1

次のような uasort 関数を使用しています。

uasort($entity_list, 'sortArray');

function sortArray($a, $b) {
  if($a['fixed_column_name'] == $b['fixed_column_name']) {
      return 0;
  }

  return ($a['fixed_column_name'] < $b['fixed_column_name']) ? -1 : 1;
}

次のように、パラメータを sortArray 関数に渡したいと思います。

uasort($entity_list, 'sortArray($arg)');

function sortArray($a, $b, $arg) {

  $larg = $arg;

  if($a[$larg] == $b[$larg]) {
      return 0;
  }

  return ($a[$larg] < $b[$larg]) ? -1 : 1;
}
4

3 に答える 3

5

PHP 5.3+ を使用している場合 (この時点で使用する必要があります)、クロージャーを使用できます。

uasort($entity_list, function ($a, $b) use ($arg) {
    if ($a[$arg] == $b[$arg]) {
        return 0;
    }
    return ($a[$arg] < $b[$arg]) ? -1 : 1;
});

globalそれ以外の場合は、変数 (いや!) またはクラスを使用して同じことを行う必要があります。

于 2012-11-06T16:36:30.870 に答える
2

いつでもクラスを使用できます:

$sorter = new Sorter($arg);
usort($entity_list, array($sorter, "sort")); //will use $sorter->sort as callback

class Sorter {
    function __construct($arg) {
        $this->arg = $arg;
    }
    function sort($a, $b) {
        // sort using $a, $b and $this->arg
    }
}

クロージャーはもっといいです^^

于 2012-11-06T16:41:59.350 に答える
0

PHP マニュアルのusort()ページのクロージャーを使用した例 #4 を見てください。uasort() を含むすべての基本的な並べ替えで同じ手法を使用できます。

于 2012-11-06T16:37:40.060 に答える