我相信如果你处理完全混乱的数据集,quicksort是处理排序的最佳方法之一。我想更新以下代码来处理带有键的数组,这样它就可以对与单个数组中的值相对的数组列表进行排序。
function quicksort($array) {
if (count($array) == 0)
return array();
$pivot = $array[0];
$left = $right = array();
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] < $pivot)
$left[] = $array[$i];
else
$right[] = $array[$i];
}
return array_merge(self::quicksort($left, ''), array($pivot), self::quicksort($right, ''));
}
答案 0 :(得分:1)
<?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);
注意:这只是一个给你一些想法的简单例子
答案 1 :(得分:0)
好的解决了。我编辑了一个快速排序并开始工作:
@PreAuthorize("hasPermission(#employee, 'edit')")
public void editEmployee(Employee employee) {
...
}
@Component
public class PermissionEvaluatorImpl implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication auth,
Object targetDomainObject, Object permission) {
// return true if "auth" has "permission" permission for the user.
// Current-user can be obtained from auth.
}
...
}
样品:
public static function quicksort($array, $key = '')
{
if ($key) {
if (count($array) == 0)
return array();
$pivot = $array[0];
$left = $right = array();
for ($i = 1; $i < count($array); $i++) {
if ($array[$i][$key] < $pivot[$key])
$left[] = $array[$i];
else
$right[] = $array[$i];
}
return array_merge(self::quicksort($left, $key), array($pivot), self::quicksort($right, $key));
} else {
if (count($array) == 0)
return array();
$pivot = $array[0];
$left = $right = array();
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] < $pivot)
$left[] = $array[$i];
else
$right[] = $array[$i];
}
return array_merge(self::quicksort($left, ''), array($pivot), self::quicksort($right, ''));
}
}