ConFoo: Call for paper is now Open

Collator::asort

collator_asort

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

Collator::asort -- collator_asortOrdenar un array manteniendo la relación de índices

Descripción

Estilo orientado a objetos

public bool Collator::asort ( array &$arr [, int $sort_flag ] )

Estilo por procedimientos

bool collator_asort ( Collator $coll , array &$arr [, int $sort_flag ] )

Esta función ordena un array de forma que sus índices mantienen su correlación con los elementos del array a los que están asociados. Se usa principalmente en la ordenación de arrays asociativos donde el orden real de los elementos es significativo. Los elementos del array estarán ordenados según las normas actuales regionales.

Es equivalente al estándar de PHP asort().

Parámetros

coll

Un objeto Collator.

arr

El array de cadenas a ordenar.

sort_flag

El tipo de ordenación opcional, uno de los siguientes:

  • Collator::SORT_REGULAR - comparar los elementos de forma normal (no cambia los tipos)

  • Collator::SORT_NUMERIC - comparar los elementos de forma numérica

  • Collator::SORT_STRING - comparar los elementos como cadenas

El valor predeterminado de $sort_flag value es Collator::SORT_REGULAR. También se utiliza si se ha especificado un valor no válido para $sort_flag.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de collator_asort()

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

collator_asort$coll$arrCollator::SORT_STRING );
var_export$arr );
?>

El resultado del ejemplo sería:

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

Ver también

add a note add a note

User Contributed Notes 1 note

up
-1
alix dot axel at NOSPAM dot gmail dot com
3 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
)
To Top