如何在PHP中使用特殊字符或数字对数组进行排序?
我在排序数组时遇到问题。我的代码适用于数字,但不适用于特殊字符。我也尝试使用strcmp()函数,但没有成功。这是我的密码:如何在PHP中使用特殊字符或数字对数组进行排序?,php,arrays,sorting,Php,Arrays,Sorting,我在排序数组时遇到问题。我的代码适用于数字,但不适用于特殊字符。我也尝试使用strcmp()函数,但没有成功。这是我的密码: $sortBy = $this->input->get('sortBy') !== NULL ? $this->input->get('sortBy') : ""; $arr_ongoing = $this->getArr($this->array_ongoing, "id"); setlocale(LC_ALL, "fr-FR");
$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]);
});
以下是我的示例阵列:
排列
(
=>阵列
(
[arrete_id]=>1
[etude_id]=>458
[lastname]=>Chambre测试
[crpcen]=>29000
[维尔]=>坎珀
)
如果“特殊字符”是指特定语言的字符,我建议使用intl
扩展包中的Collator
例如,对于波兰标准排序
:
$array=['a'、'ą'、'b'、'z'];
将为您提供:
array(4) {
[0] =>
string(1) "a"
[1] =>
string(1) "b"
[2] =>
string(1) "z"
[3] =>
string(2) "ą"
}
使用Collator进行排序时,请选择正确的:
$collator=新的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,则可以使用以下库:
例如:
$array=['a'、'ą'、'b'、'z'];
函数mysort($a,$b){
返回UTF8::strcmp($a,$b);
}
使用voku\helper\UTF8;
usort($array,'mysort');
它不需要安装mbstring或intl(尽管建议这样做)
您不应该依赖于
setlocale
,因为它基于特定系统中安装的区域设置,这些区域设置不仅可能未安装,而且它们的名称可能不同(在Windows和*nix之间,也在*nix之间)。您必须定义“工作不正常”,并可能提供一些非图像的示例文本。此外,请明确说明数据的编码。collater类需要在php.ini上进行配置。是否有其他方法不使用collator,因为我无法访问php.ini文件?请查看我的更新答案,它提供了一个纯php库的示例(可以包含在代码中)thx@Bartosz Pacholek。我尝试了这个库并使用了UTF8::strnatcmp()。它现在可以工作了。thx需要您的帮助:)
array(4) {
[0] =>
string(1) "a"
[1] =>
string(2) "ą"
[2] =>
string(1) "b"
[3] =>
string(1) "z"
}