按值的字母顺序对平面关联数组进行排序并保留原始键

问题描述 投票:0回答:6

我想按字母顺序对平面关联数组的值进行排序并保留原始键。

$arr = [
    0 => 'Newtown',
    1 => 'Montgomery',
    2 => 'Welshpool',
    6 => 'Llanfyllin',
    7 => 'Llansanffraid',
    8 => 'Llanymynech',
    9 => 'Oswestry',
    14 => 'Oswestry Town Service',
];

会变成

[
    6 => 'Llanfyllin',
    7 => 'Llansanffraid',
    8 => 'Llanymynech',
    1 => 'Montgomery',
    0 => 'Newtown',
    9 => 'Oswestry',
    14 => 'Oswestry Town Service',
    2 => 'Welshpool',
]

有什么想法吗?

这是我要排序的完整实际数组:

$arr = [
    0 => 'Newtown',
    1 => 'Montgomery',
    2 => 'Welshpool',
    6 => 'Llanfyllin',
    7 => 'Llansanffraid',
    8 => 'Llanymynech',
    9 => 'Oswestry',
    14 => 'Oswestry Town Service',
    15 => 'Aston Way',
    16 => 'College Road',
    17 => 'Shrewsbury',
    18 => 'Royal Shrewsbury Hospital',
    19 => 'Worthen',
    20 => 'Brockton',
    22 => 'Cefn Blodwell',
    23 => 'Treflach',
    24 => 'Trefonen',
    25 => 'Morda',
    26 => 'Marches School',
    28 => 'North Shropshire College',
    37 => 'Park Hall',
    38 => 'Gobowen',
    39 => 'St Martins',
    40 => 'Ifton Heath',
    42 => 'Guilsfield',
    43 => 'Four Crosses',
    45 => 'Pant',
    46 => 'Llynclys',
    49 => 'Oswestry Town Service Schools',
    51 => 'Woodside School',
    56 => 'Whittington',
    57 => 'Babbinswood',
    58 => 'Hindford',
    59 => 'Ellesmere',
    62 => 'Forden',
    63 => 'Kingswood Cock Hotel',
    65 => 'Coleg Powys',
    85 => 'Borfa Green',
    86 => 'Bryn Siriol',
    87 => 'Maesydre School',
    92 => 'Crew Green',
    93 => 'Ford',
    104 => 'Llanrhaeadr',
    106 => 'Meifod',
    114 => 'Llangynog',
    116 => 'Llangedwyn',
    119 => 'Porthywaen',
    132 => 'Llanfair Caereinion',
    133 => 'Pontrobet',
    136 => 'Dolanog',
    141 => 'Llansilin',
    144 => 'Abermule',
    145 => 'Llandyssil',
    146 => 'Carhowel',
    149 => 'Cefn Coch',
    150 => 'Tregynon',
    151 => 'Manafon',
    152 => 'Berriew',
    157 => 'Bettws Cedewain',
    158 => 'Newtown High School',
    160 => 'Newtown Coleg Powys',
    173 => 'Llanerfyl',
    174 => 'Machynlleth',
    175 => 'Talybont',
    176 => 'Aberystwyth',
    183 => 'Bala',
    184 => 'Llanrwst',
    185 => 'Llandudno',
    188 => 'Middletown',
    196 => 'Llanidloes',
    202 => 'Wrexham',
    203 => 'Rhayader',
];
    
php arrays sorting associative-array preserve
6个回答
55
投票

你想要 php 函数“asort”:

http://php.net/manual/en/function.asort.php

它对数组进行排序,维护索引关联。

编辑:我刚刚注意到您正在使用标准数组(非关联)。如果您不介意保留索引关联,请使用 sort():

http://php.net/manual/en/function.sort.php


29
投票

注意 sort() 对数组进行操作就地,所以你只需要调用

sort($a);
doSomething($a);

这行不通;

$a = sort($a);
doSomething($a);

9
投票
  • 如果您只想对数组值进行排序而不关心键,请使用
    sort()
    。这将给出一个新数组,其数字键从
    0
    开始。
  • 如果您想保留键值关联,请使用
    asort()

另请参阅 PHP 中排序函数比较表


2
投票

asort()
- 保持关键关联:

sort()
- 保持关键关联:

来源:http://php.net/manual/en/array.sorting.php


-1
投票

另请注意,对于包含以大写和小写字母开头的字符串的数组,

sort()
的默认行为并不那么“直观”。默认情况下,先对大写字母开头的字符串进行排序,然后对小写字母开头的字符串进行排序。如果您想按字母顺序排列数组而不考虑大小写,则需要传递标志
SORT_NATURAL | SORT_FLAG_CASE
,如 PHP 文档中所述。例如:

sort($array, SORT_NATURAL | SORT_FLAG_CASE);

-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.