如何在PHP中按重音键对数组排序?

2j4z5cfb  于 6个月前  发布在  PHP
关注(0)|答案(1)|浏览(48)

在PHP中,我将值作为数组的键进行了强调。我想按键排序,但Collator对象似乎没有这个选项,而是销毁了键。

<?php
$arr = ['Brasil' => 3, 'África do Sul' => 5];
$collator = new Collator('pt_BR');
$collator->sort($arr);
var_dump($arr);

$arr = ['Brasil' => 3, 'África do Sul' => 5];
$collator->asort($arr);
var_dump($arr);

$arr = ['Brasil' => 3, 'África do Sul' => 5];
$collator->sortWithSortKeys($arr);
var_dump($arr);
?>

字符串
这将显示:

array(2) {
  [0]=>int(3)
  [1]=>int(5)
}
array(2) {
  ["Brasil"]=>int(3)
  ["África do Sul"]=>int(5)
}
array(2) {
  [0]=>int(3)
  [1]=>int(5)
}


我如何才能实现我想要的排序下面?

array(2) {
  ["África do Sul"]=>int(5)
  ["Brasil"]=>int(3)
}

oyxsuwqo

oyxsuwqo1#

新建议:
使用uksort()并将Collator类的compare方法作为回调传递。
产品编号:(Demo

uksort(
    $arr,
    [new Collator('pt_BR'), 'compare']
);
var_export($arr);

字符串
老建议:
我以前从未使用过这个类,但我相信这是一个简单的误解the PHP manual的问题。老实说,我也被方法名称所欺骗。它不按键排序-正如你在手册中的演示中看到的那样,值是排序的。
因为你的键(根据定义)是唯一的,你可以安全地调用array_keys()来创建一个临时索引数组,其中原始键现在是值。然后将原始数据Map到排序数组。
产品编号:(Demo

$arr = [
    'Alemanha' => 1,
    'China' => 5,
    'EUA' => 13,
    'Itália' => 2,
    'África do Sul' => 1
];

$collator = new Collator('pt_BR');
$keys = array_keys($arr);
$collator->sort($keys);
foreach ($keys as $key) {
    $result[$key] = $arr[$key];
}
var_export($result);


或(Demo

$collator = new Collator('pt_BR');
$keys = array_keys($arr);
$collator->sort($keys);
var_export(
    array_replace(
        array_flip($keys),
        $arr
    )
);


输出量:

array (
  'África do Sul' => 1,
  'Alemanha' => 1,
  'China' => 5,
  'EUA' => 13,
  'Itália' => 2,
)

相关问题