1

次の配列があります。

$data = array(
    array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25),
    array("firstname" => "Amanda", "lastname" => "Miller", "age" => 18),
    array("firstname" => "James", "lastname" => "Brown", "age" => 31),
    array("firstname" => "Patricia", "lastname" => "Williams", "age" => 7),
    array("firstname" => "Michael", "lastname" => "Davis", "age" => 43),
    array("firstname" => "Sarah", "lastname" => "Miller", "age" => 24),
    array("firstname" => "Patrick", "lastname" => "Miller", "age" => 27)
);

そして、次の並べ替え関数:

function sortArray($data, $field)
  {
    if(!is_array($field)) $field = array($field);
      usort($data, function($a, $b) use($field) {
      $retval = 0;
      foreach($field as $fieldname) {
        if($retval == 0) $retval = strnatcmp($a[$fieldname],$b[$fieldname]);
      }
      return $retval;
    });
    return $data;
  }

それはうまく機能しますが、3番目の引数であるソート方向(ASCまたはDESC)を渡すために変更する方法を知りたいです。

ありがとうございました!

4

4 に答える 4

1

ソート機能のラッパーを作成できると思います:

asc_sorter = function(a, b) {
    return arraySorter(a, b);
}

desc_sorter = function(a, b) {
    return -arraySorter(a, b);
}

そして、asc_ または desc_ sorter のいずれかを呼び出します

于 2013-06-07T19:20:41.513 に答える
-1

次のように、方向パラメータに応じて配列を逆にすることができます。

 function sortArray($data, $field, $direction)
        /* sorting code */

        if($direction == 'DESC')
          return array_reverse($sorted_array);
        else 
          return $sorted_array;
      }
于 2013-06-07T19:20:50.793 に答える