使用してusort()anonymous function
<?php
$arr = array(
array("val" => 10, "something" => "zzz", "val2" => 1110),
array("val" => 111, "something" => "aaa", "val2" => 1),
array("val" => 1, "something" => "bbb", "val2" => 12),
array("val" => 14, "something" => "eee", "val2" => 31),
array("val" => 2, "something" => "ccc", "val2" => 11),
);
usort($arr, function ($a, $b) {
if ($a['val2'] > $b['val2']) {
$result = 1;
} elseif ($a['val2'] < $b['val2']) {
$result = -1;
} else {
$result = 0;
}
return $result;
});
var_dump($arr);
ソート戦略デザインパターンについて
<?php
class SortStrategy
{
public $key;
public function __construct($key)
{
$this->key = $key;
}
public function cmp($a, $b)
{
return ($a[$this->key] > $b[$this->key]) ? 1 : (($a[$this->key] < $b[$this->key]) ? -1 : 0);
}
}
$arr = array(
array("val" => 10, "something" => "zzz", "val2" => 1110),
array("val" => 111, "something" => "aaa", "val2" => 1),
array("val" => 1, "something" => "bbb", "val2" => 12),
array("val" => 14, "something" => "eee", "val2" => 31),
array("val" => 2, "something" => "ccc", "val2" => 11),
);
// sort by val2 key
$objSortStrategy = new SortStrategy('val2');
usort($arr, [$objSortStrategy, 'cmp']);
var_dump($arr);
// sort by val key
$objSortStrategy->key = 'val';
usort($arr, [$objSortStrategy, 'cmp']);
var_dump($arr);
// sort by something key
$objSortStrategy->key = 'something';
usort($arr, [$objSortStrategy, 'cmp']);
var_dump($arr);
NOTEを考えてみてください。これはあなたにいくつかのアイデアを与えるためだけに簡単な例である
あなたが使用していない理由は何か良い理由[usort()](http://php.net/manual/ en/function.usort.php)?コードの行数が少なくてすみます。 –
ちょっと整理されたデータではusortが速く、クイックソート/ヒープの並べ替えは速くなると思っていました...私のアレイでうまく動作するようになるとわかります –