PHP:将优先级分配给数组值,然后按优先级进行排序



有没有办法将"优先分数"分配给PHP中的数组?然后根据该优先级进行排序。考虑到我的输入:

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

我希望输出始终在顶部具有HarvardYale,其余的字母顺序排序:

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

我检查了执行自定义定义的字母顺序和uasort()asort(),但我坚持如何"分配优先级"。任何帮助将不胜感激!

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. 按钥匙排序
  2. 用字母顺序替换您的短期优先级数组

代码:(演示)

$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值被覆盖,但尊重其位置。该技术将优先学校根据匹配键将优先学校提升到列表的顶部。

假设您有类似

的东西
$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];

相关内容

最新更新