有没有办法在PHP中为数组分配“优先级得分”?然后根据该优先级进行排序。鉴于我的意见:
Array(
[princeton] => Princeton
[stanford] => Stanford
[yale] => Yale
[mit] => MIT
[harvard] => Harvard
)
我希望输出始终位于顶部Harvard
和Yale
,其余按字母顺序排序:
Array(
[harvard] => Harvard
[yale] => Yale
[mit] => MIT
[princeton] => Princeton
[stanford] => Stanford
)
我检查了asort()
,它按字母顺序排列,uasort()
是自定义的,但我仍然坚持如何“分配优先级”。任何帮助将不胜感激!
答案 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)
也许你想得太多了。
代码:(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
值被覆盖,但是它们的位置受到尊重。该技术根据匹配的关键字将优先学校排在列表的顶部。