将参数传递给sort函数

时间:2012-11-06 16:33:39

标签: php sorting

我正在使用像这样的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;
}

3 个答案:

答案 0 :(得分: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变量(哦,不!)或类来解决相同的问题。

答案 1 :(得分: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
    }
}

虽然^^

,闭包更好

答案 2 :(得分:0)

使用PHP手册的usort()页面上的闭包查看Example#4。所有基本排序都可以使用相同的技术,包括uasort()