`

White cat - Справочник по PHP

1 ... 5 6 7 8 9 ... 55 ВПЕРЕД
Перейти на страницу:

Функция поддерживается 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: $valuen";

}

?>

Этот пример выведет:

20: twenty10: ten4: four3: 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: $valuen";

}

?>

Пример одномерного массива:

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: $valn";

}

При выполнении будет напечатано:

0: 61: 52: 33: 24: 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

Если необходимо отсортировать массив с различными вторыми ключами, можно поступить следующим образом:

<?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 "</pre>";

?>

Приведенный скрипт выведет следующее:

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 при отсутствии ошибок.

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

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

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

Уазание несколько флагов сортировки после одного массива недопустимо. Флаги сортировки, которые переются после аргумента 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) первого массива, также отсортированны.

Сортировка многомерного массива

$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

Курсор массива

reset

Производит сброс курсора массива.

Синтаксис:

mixed reset(array arr)

Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.

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

<?php

$array = array("step one", "step two", "step three", "step four");

// by default, the pointer is on the first element

echo current($array) . "<br />n"; // "step one"

// skip two steps

next($array);

next($array);

echo current($array) . "<br />n"; // "step three"

// reset pointer, start again on step one

reset($array);

echo current($array) . "<br />n"; // "step one"

?>

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

1 ... 5 6 7 8 9 ... 55 ВПЕРЕД
Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение White cat - Справочник по PHP, относящееся к жанру Прочая околокомпьютерная литература. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)