• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Collator::asort()

    collator_asort

    (PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.0)

    Sort array maintaining index association

    说明

    面向对象风格
    publicCollator::asort(array &$arr[,int $sort_flag]): bool
    过程化风格
    collator_asort(Collator$coll,array &$arr[,int $sort_flag]): bool

    This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. Array elements will have sort order according to current locale rules.

    Equivalent to standard PHP asort().

    参数

    $coll

    Collator object.

    $arr

    Array of strings to sort.

    $sort_flag

    Optional sorting type, one of the following:

    • Collator::SORT_REGULAR- compare items normally(don't change types)

    • Collator::SORT_NUMERIC- compare items numerically

    • Collator::SORT_STRING- compare items as strings

    Default $sort_flag value is Collator::SORT_REGULAR. It is also used if an invalid $sort_flag value has been specified.

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    范例

    collator_asort()example

    <?php
    $coll = collator_create( 'en_US' );
    $arr = array(
         'a' => '100',
         'b' => '50',
         'c' => '7'
    );
    collator_asort( $coll, $arr, Collator::SORT_NUMERIC );
    var_export( $arr );
    collator_asort( $coll, $arr, Collator::SORT_STRING );
    var_export( $arr );
    ?>
    

    以上例程会输出:

    array (
      'c' => '7',
      'b' => '50',
      'a' => '100',
    )array (
      'a' => '100',
      'b' => '50',
      'c' => '7',
    )
    

    参见

    • Collator constants
    • collator_sort() Sort array using specified collator
    • collator_sort_with_sort_keys() Sort array using specified collator and sort keys
    For those of you who are looking for a way to integrate natural sorting with the UCA rules this hack seems to work:
    <?php
    $array = array
    (
      '1', '100',
      'al', 'be',
      'Alpha', 'Beta',
      'Álpha', 'Àlpha', 'Älpha',
      'かたかな',
      'img1.png', 'img2.png',
      'img10.png', 'img20.png'
    );
    echo '<pre>';
    print_r(sortIntl($array, true));
    echo '</pre>';
    function sortIntl($array, $natural = true)
    {
      $data = $array;
      if ($natural === true)
      {
        $data = preg_replace_callback('~([0-9]+)~', 'natsortIntl', $data);
      }
      collator_asort(collator_create('root'), $data);
      return array_intersect_key($array, $data);
    }
    function natsortIntl($number)
    {
      return sprintf('%032d', $number);
    }
    ?>
    Output:
    Array
    (
      [0] => 1
      [1] => 100
      [2] => al
      [3] => be
      [4] => Alpha
      [5] => Beta
      [6] => Álpha
      [7] => Àlpha
      [8] => Älpha
      [9] => かたかな
      [10] => img1.png
      [11] => img2.png
      [12] => img10.png
      [13] => img20.png
    )