Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用特殊字符或数字对数组进行排序?_Php_Arrays_Sorting - Fatal编程技术网

如何在PHP中使用特殊字符或数字对数组进行排序?

如何在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");

我在排序数组时遇到问题。我的代码适用于数字,但不适用于特殊字符。我也尝试使用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]); 
});
以下是我的示例阵列: 排列 ( =>阵列 ( [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"
}
如果不能使用pecl
intl
,但使用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"
}