PHP SQL
PHP SQL .ru
  Главная  Уроки  PHP  MySQL  jQuery  RegEx  CSS  Книги  Форум  
 Функции


  На главную

  Назад  Вперед

  Печать

Сортировка массивов

Сортировка массивов

array_reverse
Расстановка элементов массива в обратном порядке.

Синтаксис :
array array_reverse(array arr [, bool preserve_keys])

Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями не теряются, если дополнительный параметр preserve_keys = TRUE.

Пример использования функции array_reverse():

<?php
$input  = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, true);
?>
Этот пример сделает оба массива $result и $result_keyed с одинаковыми значениями, но различными ключами. Распечатка массивов $result и $result_keyed будет следующей:
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)
Примечание: Второй параметр preserve_keys был добавлен в PHP 4.0.3.

Функция поддерживается PHP 4, PHP 5


shuffle
Перемешивание элементов массива.

Синтаксис:
void shuffle(array arr)

Функция shuffle() "перемешивает" список, переданный ей первым параметром arr, так, чтобы его значения распределялись случайным образом. При этом измениться сам массив и ассоциативные массивы воспринимаются как списки.

Пример использования функции shuffle():

<?php
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(, $number) = each($numbers)) {
    echo "$number ";
}
?>
Замечание: Начиная с PHP 4.2.0, больше нет необходимости инициализировать генератор случайных чисел функциями srand() или mt_srand(), поскольку теперь это происходит автоматически.

Функция поддерживается PHP 3 >= 3.0.8, PHP 4, PHP 5


sort
Сортировка массива по возрастанию.

Синтаксис:
bool sort(array arr [, int sort_flags])

Функция sort() предназначена для сортировки массивов в порядке возрастания.

Замечание: Эта функция изменяет ключи у отсортированных значений. Т.е. любой ассоциативный массив воспринимается этой функцией как список. После упорядочивания последовательность ключей превращается в 0,1,2,..., а значения нужным образом перераспределяются. Как видим, связи между параметрами ключ=>значение не сохраняются, более того - ключи просто пропадают, поэтому сортировать что-либо, отличное от списка, вряд ли целесообразно.

Пример использования функции sort():

<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "fruits[" . $key . "] = " . $val . "
";
}
?>

Этот пример выведет:
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
Аргумент sort_flags задает следующие флаги сортировки:
  • SORT_REGULAR - сравнивает элементы "как есть";
  • SORT_NUMERIC - сравнивает элементы как числа;
  • SORT_STRING - сравнивает элементы как строки.

    Функция поддерживается PHP 3, PHP 4, PHP 5


  • rsort
    Сортировка массива по убыванию.

    Синтаксис:

    bool rsort ( array array [, int sort_flags])

    Функция rsort() сортирует массив array в порядке убывания (от высших значений к низшим).

    Функция возвращает TRUE в случае успешного завершения, и FALSE в противном случает.

    Пример использования функции rsort():

    <?php
    $fruits = array("lemon", "orange", "banana", "apple");
    rsort($fruits);
    reset($fruits);
    while (list($key, $val) = each($fruits)) {
        echo "$key = $val
    ";
    }
    ?>
    
    Этот пример выведет:
    0 = orange
    1 = lemon
    2 = banana
    3 = apple
    
    Аргумент sort_flags задает следующие флаги сортировки:
  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

    Функция поддерживается PHP 3, PHP 4, PHP 5


  • asort
    Сортировка ассоциативного массива по возрастанию.

    Синтаксис :
    bool asort(array arr [, int sort_flags])

    Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или возрастающем (для чисел) порядке. При этом сохраняются связи между ключами и соответствующими им значениями, т.е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые - наоборот, "опускаются".

    Функция возвращает true в случае успешного завершения, и false в случае возникновения ошибки.

    Пример использования функции asort():

    <?php
    $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", 
                    "c" => "apple");
    asort($fruits);
    reset($fruits);
    while (list($key, $val) = each($fruits)) {
        echo "$key = $val
    ";
    }
    ?>
    
    
    Пример выведет следующее:
    c = apple
    b = banana
    d = lemon
    a = orange
    
    Массив $fruits был отсортирован в возрастающем символьном порядке, при этом индексы массива были сохранены.

    Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
    Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:

  • SORT_REGULAR - нормальное сравение значений;
  • SORT_NUMERIC - сравнивать как числа;
  • SORT_STRING - сравнивать как строки.

    Этот параметр был введен в PHP начиная с 4 версии.

    Функция поддерживается PHP 3, PHP 4, PHP 5


  • arsort
    Сортировка ассоциативного массива по убыванию.

    Синтаксис :
    bool arsort(array arr [, int sort_flags])

    Функция arsort() сортирует массив arr по убыванию с сохранением индексных ассоциаций.
    Эта функция используется главным образом там, где существенен порядок элемента в массиве.

    Функция возвращает true в случае успешной сортировки, и false в случае возникновения ошибки.

    Пример использования функции arsort():

    $arr=array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    arsort($arr);
    reset($arr);
    while(list ($key, $val) = each ($arr)) {
      echo "$key = $val<BR>l";
    }
    
    
    Пример выведет:
    a = orange
    d = lemon
    b = banana
    c = apple
    
    Массив $arr был отсортирован в убывающем символьном порядке, при этом индексы массива были сохранены.

    Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
    Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:

  • SORT_REGULAR - нормальное сравение значений;
  • SORT_NUMERIC - сравнивать как числа;
  • SORT_STRING - сравнивать как строки.

    Этот параметр был введен в PHP начиная с 4 версии.

    Функция поддерживается PHP 3, PHP 4, PHP 5


  • ksort
    Сортировка массива по возрастанию ключей.

    Синтаксис :
    bool ksort(array arr [, int sort_flags])

    Функция ksort() сортирует массив в порядке возрастания ключей с сохранением взаимосвязей ключей и значений. Эта функция особенно полезна при сортировке ассоциативных массивов.

    Функция возвратит TRUE, если все прошло успешно, и FALSE в противном случае.

    Пример использования функции ksort():

    <?php
    $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    ksort($fruits);
    reset($fruits);
    while (list($key, $val) = each($fruits)) {
        echo "$key = $val
    ";
    }
    ?>
    
    
    Данный пример выведет:
    a = orange
    b = banana
    c = apple
    d = lemon
    
    Аргумент sort_flags задает следующие флаги сортировки:
  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

    Функция поддерживается PHP 3, PHP 4, PHP 5


  • krsort
    Сортировка массива по убыванию индексов.

    Синтаксис :
    bool krsort(array arr [, int sort_flags])

    Функция krsort() сортирует ключи в массиве arr в обратном порядке. При этом связка ключей и значений сохраняется. Эта функци полезна при сортировке ассоциативных массивов.

    Функция возвращает TRUE в случае успешного завершения, и FALSE в противном случае.

    Пример использования функции krsort():

    <?php
    $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    krsort($fruits);
    reset($fruits);
    while (list($key, $val) = each($fruits)) {
        echo "$key = $val
    ";
    }
    ?>
    
    
    Данный пример выведет:
    d = lemon
    c = apple
    b = banana
    a = orange
    
    Аргумент sort_flags задает следующие флаги сортировки:
  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

    Функция поддерживается PHP 3 >= 3.0.13, PHP 4, PHP 5


  • natsort
    Выполняет "естественную" сортировку массива.

    Синтаксис :
    void natsort(array arr)

    Функция natsort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.

    Пример использования функции natsort():

    <?php
    $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
    
    sort($array1);
    echo "Стандартная сортировка
    ";
    print_r($array1);
    
    natsort($array2);
    echo "
    Естественная сортировка
    ";
    print_r($array2);
    ?>
    
    
    Этот пример выведет следующее:
    Стандартная сортировка
    Array
    (
        [0] => img1.png
        [1] => img10.png
        [2] => img12.png
        [3] => img2.png
    )
    
    Естественная сортировка
    Array
    (
        [3] => img1.png
        [2] => img2.png
        [1] => img10.png
        [0] => img12.png
    )
    
    Функция поддерживается PHP 4, PHP 5

    natcasesort
    Выполняет естественную сортировку массива без учета регистра символов.

    Синтаксис :
    void natcasesort(array arr)

    Функция natcasesort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.

    Эта функция схожа с natsort(), только не учитывает регистр символов.

    Пример использования функции natcasesort():

    <?php
    $array1 = $array2 = array("IMG0.png", "img12.png", "img10.png",
                              "img2.png", "img1.png", "IMG3.png");
    
    sort($array1);
    echo "Стандартная сортировка
    ";
    print_r($array1);
    
    natcasesort($array2);
    echo "
    Естественная сортировка (без учета регистра)
    ";
    print_r($array2);
    ?>
    
    
    Приведенный пример выведет следующее:
    Стандартная сортировка
    Array
    (
        [0] => IMG0.png
        [1] => IMG3.png
        [2] => img1.png
        [3] => img10.png
        [4] => img12.png
        [5] => img2.png
    )
    
    Естественная сортировка (без учета регистра)
    Array
    (
        [0] => IMG0.png
        [4] => img1.png
        [3] => img2.png
        [5] => IMG3.png
        [2] => img10.png
        [1] => img12.png
    )
    
    Функция поддерживается PHP 4, PHP 5

    uasort
    Пользовательская сортировка ассоциативного массива с сохранением индексных ассоциаций.

    Синтаксис:
    bool uasort(array arr, function cmp_function)

    Функция uasort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function.

    Эта функция используется главным образом когда соответствие индексов и значений массива существенно.

    Функция uasort() возвращает TRUE в случае успешного завершения сортировки, и FALSE в противном случае.

    Замечание: Смотрите функции usort() и uksort() для написания пользовательской функции.

    Функция поддерживается PHP 3 >=3.0.4, PHP 4, PHP 5


    uksort
    Пользовательская сортировка массива по ключам.

    Синтаксис:
    bool uksort(array arr, function cmp_function)

    Функция uksort() сортирует массив arr по индексам с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

    Функция uksort() возвращает TRUE в случае успешного завершения сортировки, и FALSE в противном случае.

    Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files храниться список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексографическом порядке, но также чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует uksort().

    1 пример использования функции uksort():

    // Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
    // -1, если $f1<$f2,
    //  0, если $f1==$f2
    //  1, если $f1>$f2
    // Под < и > понимаем следование этих имен в выводимом списке
    function FCmp($f1,$f2)
    { // Каталог всегда предшествует файлу
      if(is_dir($f1) && !is_dir($f2)) return -1;
      // Файл всегда идет после каталога
      if(!is_dir($f1) && is_dir($f2)) return 1;
      // Иначе сравниваем лексиграфически
      if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
    }
    // Пусть $Files содержит массив с ключами - именами файлов
    // в текущем каталоге. Отсортируем его.
    uksort($Files,"FCmp");  //передаем функцию сортировки "по ссылке"
    
    
    2 пример использования функции uksort():
    <?php
    function cmp($a, $b) 
    {
        if ($a == $b) {
            return 0;
        }
        return ($a > $b) ? -1 : 1;
    }
    
    $a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
    
    uksort($a, "cmp");
    
    while (list($key, $value) = each($a)) {
        echo "$key: $value
    ";
    }
    ?>
    
    
    Этот пример выведет:
    20: twenty
    10: ten
    4: four
    3: three
    
    Функция поддерживается PHP 3 >=3.0.4, PHP 4, PHP 5

    usort
    Пользоваетльская сортировка значений массива.

    Синтаксис:
    bool usort(array arr, callback cmp_function)

    Функция usort() сортирует массив arr без сохраненя индексных ассоциаций, используя для сравнения значений пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

    Эта функция как бы является "гибридом" функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() - тем, что она не сохраняет связей между ключами и значениями, а потому пригодна разве что для сортировки списков.

    Пример использования функции usort():

    <?php
    function cmp($a, $b) 
    {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    
    $a = array(3, 2, 5, 6, 1);
    
    usort($a, "cmp");
    
    while (list($key, $value) = each($a)) {
        echo "$key: $value
    ";
    }
    ?>
    
    Пример одномерного массива:
    function cmp($a, $b) {
      if($a==$b) return 0;
      return ($a > $b) ? -1 : 1;
    }
    $a=array (3,2,5,6,1);
    usort($a, "cmp");
    while(list($key,$val)=each($a)) {
      echo "$key: $val
    ";
    }
    
    
    При выполнении будет напечатано:
    0: 6
    1: 5
    2: 3
    3: 2
    4: 1
    
    Пример многомерного массива:
    function cmp($a,$b) {
      return strcmp($a["fruit"],$b["fruit"]);
    };
    $fruit[0]["fruit"]="lemons";
    $fruit[1]["fruit"]="apples";
    $fruit[2]["fruit"]="grapes";
    
    usort($fruit, "cmp");
    
    while(list($key,$val)=each($fruit)) {
      echo "$fruit[$key]:".$val["fruit"]."
    ";
    }
    При сортировке многомерных массивов $a и $b содержит ссылки на первый индекс массива.
    Будет напечатано:
    $fruit[0]: apples
    $fruit[1]: grapes
    $fruit[2]: lemons
    
    Если необходимо отсортировать массив с различными вторыми ключами, можно поступить следующим образом:
    <?php
    function arr_sort($a,$b) {
      list($key1,$val)=each($a);
      list($key2,$val)=each($b);
      return strcmp($a[$key1],$b[$key2]);
    };
    
    $arr[0]["1-ый элемент"]="яблока";
    $arr[1]["2-ый элемент"]="груша";
    $arr[2]["3-ый элемент"]="персик";
    $arr[3]["4-ый элемент"]="дыня";
    $arr[4]["5-ый элемент"]="малина";
    $arr[5]["6-ый элемент"]="ананас";
    
    usort($arr,"arr_sort");
    
    echo "<pre>";
    print_r($arr);
    echo "
    "; ?> Приведенный скрипт выведет следующее:
    Array
    (
        [0] => Array
            (
                [6-ый элемент] => ананас
            )
    
        [1] => Array
            (
                [2-ый элемент] => груша
            )
    
        [2] => Array
            (
                [4-ый элемент] => дыня
            )
    
        [3] => Array
            (
                [5-ый элемент] => малина
            )
    
        [4] => Array
            (
                [3-ый элемент] => персик
            )
    
        [5] => Array
            (
                [1-ый элемент] => яблока
            )
    )
    
    
    Функция поддерживается PHP 3 >=3.0.3, PHP 4, PHP 5

    array_multisort
    Сортировка нескольких массивов или многомерного массива.

    Синтаксис:
    bool array_multisort(array ar1, [, mixed arg [, mixed ... [, array ...]]])

    Функция array_multisort() сортирует сразу несколько массивов или многомерные массивы с сохранением индексной ассоциации, возвращая true при отсутствии ошибок.

    Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется. Приоритетом сортировки пользуются первые массивы. Флаги сортировки могут указваться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.

    Флаги определения порядка сортировки:

  • SORT_ASC - сортировка в порядке возрастания (по умолчанию)
  • SORT_DESC - сортировка в порядке убывания

    Флаги типа сортировки:

  • SORT_REGULAR - сравнивать элементы как есть (по умолчанию)
  • SORT_NUMERIC - сравнивать элементы как числа
  • SORT_STRING - сравнивать элементы как строки

    Уазание несколько флагов сортировки после одного массива недопустимо. Флаги сортировки, которые переются после аргумента arr.. применяются только к этому аргументу. Если после следующего аргумента флаги не указаны, то принимаются флаги по умолчанию (SORT_ASC, SORT_REGULAR).

    Пример использования функции array_multisort(): Сортировка нескольких массивов

    ar1 = array("10", 100, 100, "a");
    ar2 = array(1, 3, "2", 1);
    array_multisort($ar1, $ar2);
      // $ar1 = array("10", "a", 100, 100);
      // $ar2 = array(1, 1, "2", 3);
    
    Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированны.

    Пример использования функции array_multisort(): Сортировка многомерного массива

    $ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1));
    array_multisort($ar[0], SORT_ASC, SORT_STRING, 
                       $ar[1], $SORT_NUMERIC, SORT_DESC);
    
    // $ar[0] = ("10", 100, 100, "a") - сортируются как строки по возрастанию
    // $ar[1] = (1, 3, "2", 1) - сортируются как числа по убыванию
    
    
    Функция поддерживается PHP 4, PHP 5
  •  
    Предыдущая   На главную   Следующая          

    Ваш комментарий:

    '

    Реклама на сайте | Обмен ссылками | Ссылки | Контакты
    Добавить статью | Добавить исходник
    2010-2014 © phpsql.ru