PHP:为数组值分配优先级,然后按该优先级排序

时间:2014-01-29 00:07:28

标签: php arrays sorting

有没有办法在PHP中为数组分配“优先级得分”?然后根据该优先级进行排序。鉴于我的意见:

Array(
  [princeton] => Princeton
  [stanford] => Stanford
  [yale] => Yale
  [mit] => MIT
  [harvard] => Harvard 
)

我希望输出始终位于顶部HarvardYale,其余按字母顺序排序:

Array(
  [harvard] => Harvard
  [yale] => Yale
  [mit] => MIT
  [princeton] => Princeton
  [stanford] => Stanford    
)

我检查了asort(),它按字母顺序排列,uasort()是自定义的,但我仍然坚持如何“分配优先级”。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

uasort将通过您自己的比较函数对数组进行排序。我已经将函数放在哈佛或耶鲁的首位(由于你没有指定,这两个函数的排序将不确定)并按字母顺序对其余部分进行排序。

function cmp($a, $b) {
    if ($a == 'Yale' || $a == 'Harvard') {
        return -1;
    } else if ($b == 'Yale' || $b == 'Harvard') {
        return 1;
    } else return strcmp($a, $b);
}

uasort($array, 'cmp');

答案 1 :(得分:0)

假设您有类似

的内容
$priotities=array(
  [harvard] => 1
  [yale] => 2
  [mit] => 3
  [princeton] => 4
  [stanford] => 5
)

你可以

$final=$priorites;
sort(final);
foreach ($final as $k=>$v) 
  $final[$k]=$universities[$k];

答案 2 :(得分:0)

也许你想得太多了。

  1. 按键排序
  2. 用字母数组代替短优先级数组

代码:(Demo

$ivyLeaguers = [
  'princeton' => 'Princeton',
  'cornell' => 'Cornell',
  'stanford' => 'Stanford',
  'yale' => 'Yale',
  'mit' => 'MIT',
  'harvard' => 'Harvard'
];

ksort($ivyLeaguers);
var_export(
    array_replace(['harvard' => null, 'yale' => null], $ivyLeaguers)
);

输出:

array (
  'harvard' => 'Harvard',
  'yale' => 'Yale',
  'cornell' => 'Cornell',
  'mit' => 'MIT',
  'princeton' => 'Princeton',
  'stanford' => 'Stanford',
)

null值被覆盖,但是它们的位置受到尊重。该技术根据匹配的关键字将优先学校排在列表的顶部。