繁体   English   中英

如何在PHP中对带有特殊字符或数字的数组进行排序?

[英]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) "ą"
}

在使用 Collat​​or 进行排序时,正确的是:

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM