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 回答