我在排序数组时遇到问题。我的代码适用于数字,但不适用于特殊字符。我也尝试了strcmp()函数,但是没有运气。这是我的代码:
$sortBy = $this->input->get('sortBy') !== NULL ? $this->input->get('sortBy') : "";
$arr_ongoing = $this->getArr($this->array_ongoing, "id");
setlocale(LC_ALL, "fr-FR");
usort($arr_ongoing, function ($a, $b) use($sortBy) {
return strcoll($a[$sortBy], $b[$sortBy]);
});
这是我的示例数组:Array(1 => Array([arrete_id] => 1 [etude_id] => 458 [lastname] => Chambre test [crpcen] => 29000 [ville] => Quimper)
[2] => Array
(
[arrete_id] => 2
[etude_id] => 361
[lastname] => PICART et Associé(s)
[crpcen] => 44007
[ville] => NANTES
)
[3] => Array
(
[arrete_id] => 3
[etude_id] => 35
[lastname] => JARNOUEN de VILLARTAY et REGEON-VERGNOUX - SE
[crpcen] => 22005
[ville] => SAINT-BRIEUC CEDEX 2
)
[12] => Array
(
[arrete_id] => 12
[etude_id] => 132
[lastname] => LE PAPE et LACOURT
[crpcen] => 29022
[ville] => PONT-L'ABBE CEDEX
)
[13] => Array
(
[arrete_id] => 13
[etude_id] => 222
[lastname] => KERJEAN et Associé(s)
[crpcen] => 35129
[ville] => BRUZ CEDEX
)
)
如果“特殊字符”是指我建议Collator
从intl
扩展包中使用的特定语言的字符。
例如波兰标准sort
:
$array = [ 'a', 'ą', 'b', 'z' ];
会给你:
array(4) {
[0] =>
string(1) "a"
[1] =>
string(1) "b"
[2] =>
string(1) "z"
[3] =>
string(2) "ą"
}
而使用Collator进行正确排序时:
$collator = new Collator('pl_PL');
$collator->sort($array);
给出正确的:
array(4) {
[0] =>
string(1) "a"
[1] =>
string(2) "ą"
[2] =>
string(1) "b"
[3] =>
string(1) "z"
}
如果您不能使用peclintl
而是使用PHP> = 7.0.0,则可以使用以下lib:https : //github.com/voku/portable-utf8
例如:
$array = [ 'a', 'ą', 'b', 'z' ];
function mysort($a, $b) {
return UTF8::strcmp($a, $b);
}
use voku\helper\UTF8;
usort($array, 'mysort');
它不需要安装mbstring或intl(尽管建议这样做)。
您不应该依赖setlocale
它,因为它基于特定系统中安装的语言环境,这些语言环境可能不仅没有安装,而且它们的名称也可能不同(在Windows和* nix之间,而且在* nixes之间)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句