Читаем Справочник по 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

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

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 "

";

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

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

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

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

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


Перейти на страницу:

Похожие книги