概要
uasort
詳細
uasortでユーザー定義のソートを適用する
サンプル
<?php class Hoge { private $id; function __construct($id) { $this->id = $id; } function getId() { return $this->id; } } function idComparator($a, $b) { if ($a->getId() == $b->getId()) { return 0; } return ($a->getId() < $b->getId()) ? -1 : 1; } function idReverseComparator($a, $b) { if ($a->getId() == $b->getId()) { return 0; } return ($a->getId() < $b->getId()) ? 1 : -1; } $hoge1 = new Hoge(1); $hoge2 = new Hoge(2); $hoge3 = new Hoge(3); $hoges = array($hoge2, $hoge1, $hoge3); print_r($hoges); print("\n"); uasort($hoges, 'idComparator'); print_r($hoges); print("\n"); uasort($hoges, 'idReverseComparator'); print_r($hoges); print("\n");
出力
Array ( [0] => Hoge Object ( [id] => 2 ) [1] => Hoge Object ( [id] => 1 ) [2] => Hoge Object ( [id] => 3 ) ) Array ( [1] => Hoge Object ( [id] => 1 ) [0] => Hoge Object ( [id] => 2 ) [2] => Hoge Object ( [id] => 3 ) ) Array ( [2] => Hoge Object ( [id] => 3 ) [0] => Hoge Object ( [id] => 2 ) [1] => Hoge Object ( [id] => 1 ) )
Rubyと比較
# encoding: utf-8 require 'pp' class Hoge attr_reader :id def initialize(id) @id = id end end hoge1 = Hoge.new(1); hoge2 = Hoge.new(2); hoge3 = Hoge.new(3); hoges = [hoge2, hoge1, hoge3] pp hoges pp hoges.sort {|one, other|one.id <=> other.id} pp hoges.sort {|one, other|one.id <=> other.id}.reverse