根据字符串末尾的优先级子字符串对字符串数组进行排序

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

如何从中订购数组:

$unordered_array = ['11196311|3','17699636|13','11196111|0','156875|2','17699679|6','11196237|7','3464760|10'];

对此

$ordered_array = ['11196111', '156875', '11196311', '17699679','11196237','3464760', '17699636'];

“|”后面的数字定义位置,数组需要从低到高排序,并去掉最终数组中的位置号。

php arrays sorting delimited custom-sort
2个回答
2
投票
$array = array();
foreach($unordered_array as $value) {
    $value = explode('|', $value);
    $array [$value[1]]= $value[0];    
}
ksort($array);
$ordered_array = array_values($array);

var_dump($ordered_array);

0
投票

将值拆分为两个包含 ids 和排序优先级的数组,然后使用优先级数组对 ids 数组进行排序。当相同的优先级编号分配给多个 id 时,以下方法甚至可以发挥作用。

代码:(演示

$unordered_array = ['11196311|3','17699636|13','11196111|0','156875|2','17699679|6','11196237|7','3464760|10'];

$ids = [];
$priorities = [];
foreach ($unordered_array as $v) {
    [$ids[], $priorities[]] = explode('|', $v);
}
array_multisort($priorities, SORT_NUMERIC, $ids);
var_export($ids);
© www.soinside.com 2019 - 2024. All rights reserved.