Установить Adobe Flash плеерЗарегистрируйся и зарабатывай

Главная страница http://halk.at.ua/ | Ваше группа 0 | У вас 0 сообщения |

INFO сайта
Сегодня материалов нет.
Меню сайта
Мини-чат
 
500
Категории раздела
Уроки PHP [22]
Уроки PHP для начинающих и профессионалов
Поиск
Реклама
Ваш реклама там где вы хотите! 

Главная » Статьи » PHP » Уроки PHP [ Добавить статью ]

Работа с массивами : Сортировка массивов




Новая страница 1






Работа с массивами : Сортировка массивов



array_reverse

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



Синтаксис :

array array_reverse(array arr);



Функция array_reverse() возвращает массив, элементы которого
следуют в обратном порядке относительно массива, переданного в
параметре. При этом связи между ключами и значениями, конечно, не
теряются. Например, вместо того, чтобы ранжировать массив в обратном
порядке при помощи arsort(), мы можем отсортировать его в
прямом порядке, а затем перевернуть:
$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor"); 

asort($A);

$A = array_reverse($A);





shuffle

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



Синтаксис:

void shuffle(array arr);



Функция shuffle() "перемешивает" список, переданный ей первым
параметром arr, так, чтобы его значения распределялись
случайным образом. При этом измениться сам массив и ассоциативные
массивы воспринимаются как списки.
$A = array(10,20,30,40,50); 
shuffle($A);
foreach($A as $v) echo "$v ";
// Выведет 10,20,30,40,50 в случайном порядке





sort

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



Синтаксис:

void sort(array arr [, int sort_flags])



Эта функция предназначена для сортировки списков (списки - массивы,
ключи которых начинаются с 0 и не имеют пропусков) в порядке
возрастания.
$A = array("One", "Two", "Tree", "Four"); 
sort($A);
for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";
// выводит "0:Four 1:Two 2:Tree 3:One"

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



Аргумент sort_flags задает следующие флаги сортировки:
  • SORT_REGULAR - сравнивает элементы "как есть"

  • SORT_NUMERIC - сравнивает элементы как числа

  • SORT_STRING - сравнивает элементы как строки





  • rsort

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



    Синтаксис:



    void rsort(array arr [, int sort_flags])



    Аналогична функции sort(), только сортирует по убыванию.




    asort

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



    Синтаксис :

    void asort(array arr [, int sort_flags]);



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

     
    $A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor"); 
    asort($A);
    foreach($A as $k=>$v) echo "$k=>$v ";
    // выводит "c=>Alpha d=>Processor b=>Weapon a=>Zero"
    // как видим, поменялся только порядок пар ключ=>значение

    По умолчанию функция asort() сортирует массив в алфавитном
    порядке. Значения флагов сортировки sort_flags приведены в
    описании функции sort().




    arsort

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



    Синтаксис :

    void arsort(array arr [, int sort_flags]);



    Эта функция аналогична функции asort(), только она
    упорядочивает массив не по возрастанию, а по убыванию.
    $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





    ksort

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



    Синтаксис :

    int ksort(array arr [, int sort_flags]);



    Функция практически идентична функции asort(), с тем
    различием, что сортировка осуществляется не по значениям, а по
    ключам (в порядке возрастания).
    $A=array("d"=>"Zero","c"=>"Weapon","b"=>"Alpha","a"=>"Processor"); 
    ksort($A);
    for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v ";
    // выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero"

    Аргумент sort_flags указывавет параметры сортировки.




    krsort

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



    Синтаксис :

    int krsort(array arr [, int sort_flags]);



    Эта функция аналогична функции ksort(), только она
    упорядочивает массив по ключам в обратном порядке.




    natsort

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



    Синтаксис :

    void natsort(array arr);



    Функция natsort() сортирует массив в "естественном" для
    человека порядке.
    $arr1 = array("html_12.html", "html_10.html", "html_2.html", "html_1.html"); 
    $arr2 = $arr1;
    sort($arr1);
    echo "Стандартная сортировка:\n";
    print_r($arr1);
    natsort($arr2);
    echo "Естественная сортировка:\n"
    print_r($arr2);

    Этот пример выведет следующее:
    Стандартная сортировка: 
    Array
    (
    [0] => html_1.html
    [1] => html_10.html
    [2] => html_12.html
    [3] => html_2.html
    )
    Естественная сортировка:
    Array
    (
    [3] => html_1.html
    [2] => html_2.html
    [1] => html_10.html
    [0] => html_12.html
    )





    uasort

    Пользовательская сортировка ассоциативного массива.



    Синтаксис:

    void uasort(array arr, function cmp_function)



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




    uksort

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



    Синтаксис:

    void uksort(array arr, function cmp_function)



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



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





    usort

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



    Синтаксис:

    void usort(array arr, function cmp_function)



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



    Эта функция как бы является "гибридом" функций uasort() и
    sort()
    . От sort() она отличается тем, что критерий
    сравнения обеспечивается пользовательской функцией. А от uasort()
    - тем, что она не сохраняет связей между ключами и значениями, а
    потому пригодна разве что для сортировки списков.
    function FCmp($a,$b) { return strcmp($a,$b); } 
    $A = array("One","Two","Three","Four");
    usort($A);
    for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";
    // выводит "0:Four 1:One 2:Three 3:Two"

    Пример одномерного массива:
    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\n";
    }

    При выполнении будет напечатано:
    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"]."\n";
    }

    При сортировке многомерных массивов $a и $b содержит ссылки на
    первый индекс массива.

    Будет напечатано:
    $fruit[0]: apples 
    $fruit[1]: grapes
    $fruit[2]: lemons





    array_multisort

    Сортировка релятивных массивов.



    Синтаксис:

    bool array_multisort(array ar1, [, mixed o1 [, mixed t1 ... [, array
    ...]]])



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



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



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

  • SORT_DESC - сортировка в порядке убывания Флаги типа сортировки
    (аргументы tx):

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

  • SORT_NUMERIC - сравнивать элементы как числа

  • SORT_STRING - сравнивать элементы как строки
    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", 4);

    Элементы второго массива, соответствующие одинаковым элементам (100
    и 100) первого массива, также отсортированны.
    $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) - сортируются как числа по
    убыванию






  • Материалы сайта Справочник Web-языков

    http://www.HALK.at.ua





    Категория: Уроки PHP | Добавил: Admin (25.10.2013) | Автор: admin E W
    Просмотров: 684 | Рейтинг: 0.0/0
    Всего комментариев: 0
    avatar
    Друзья сайта
  • Все для веб-мастера
  • Программы для всех
  • Мир развлечений
  • Лучшие сайты Рунета
  • Кулинарные рецепты
  • Статистика

    Онлайн всего: | Online in total: 1
    Гостей: | The visitors: 1
    Пользователей: | The users: 0
    Наш опрос
    Оцените мой сайт
    Всего ответов: 16
    Установить Adobe Flash плеер

    Хостинг от uCoz