有没有办法将"优先分数"分配给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
)
我检查了执行自定义定义的字母顺序和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');
也许您对此有所思考。
- 按钥匙排序
- 用字母顺序替换您的短期优先级数组
代码:(演示)
$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];