[英]How to sort array with special characters or numbers in PHP?
我在排序数组时遇到问题。 我的代码适用于数字,但不适用于特殊字符。 我也尝试过 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
)
)
如果“特殊字符”是指特定于特定语言的字符,我建议使用intl
扩展包中的Collator
。
例如对于波兰标准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"
}
如果你不能使用 pecl intl
但使用 PHP >=7.0.0 你可以使用这个库: 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 之间,以及在 *nix 之间)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.