Collator::asort

collator_asort

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

Collator::asort -- collator_asort β€” Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ массив с сохранСниСм ассоциации индСкса

ОписаниС

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

public function Collator::asort(array &$array, int $flags = Collator::SORT_REGULAR): bool

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

function collator_asort(Collator $object, array &$array, int $flags = Collator::SORT_REGULAR): bool

Ѐункция сортируСт массив Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ индСксы массива сохраняли свою ΠΊΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡŽ с элСмСнтами массива, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ связаны. Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном ΠΏΡ€ΠΈ сортировкС ассоциативных массивов, Π³Π΄Π΅ Π²Π°ΠΆΠ΅Π½ фактичСский порядок элСмСнтов. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ порядок сортировки Π² соотвСтствии с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΠΈ.

Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PHP asort().

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

object

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Collator.

array

Массив строк для сортировки.

flags

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ сортировки, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…:

  • Collator::SORT_REGULAR - сравниваСт элСмСнты ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ (Π½Π΅ измСняя Ρ‚ΠΈΠΏ)

  • Collator::SORT_NUMERIC - сравниваСт элСмСнты, ΠΊΠ°ΠΊ числа

  • Collator::SORT_STRING - сравниваСт элСмСнты, ΠΊΠ°ΠΊ строки

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flags ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - Collator::SORT_REGULAR. Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flags.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΈΠ»ΠΈ false, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования collator_asort()

<?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
  • collator_sort() - Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ массив с использованиСм ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ срСдства сортировки
  • collator_sort_with_sort_keys() - Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ массив с использованиСм ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Collator ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ сортировки
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
-1
alix dot axel at NOSPAM dot gmail dot com ΒΆ
15 years ago
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
)