Вы можете использовать pattern-sort-undecorate pattern.
<?php
$arr = Array
(
[0] => Array
(
[name] => http://bit.ly/2oUTzf
[count] => 1
)
[1] => Array
(
[name] => http://tiny.cc/wyNbi
[count] => 1
)
[2] => Array
(
[name] => http://ow.ly/Almo
[count] => 1
)
[3] => Array
(
[name] => http://bit.ly/7bQ8sY
[count] => 1
)
...
);
// actual sorting below
$arr= array_map(create_function('$a', 'return array($a["count"], $a);'), $arr); // transform into array of arrays consisted of sort key and item
sort($arr); // sort array of arrays
$arr = array_map('end', $arr); // take only last element from each array
print_r($arr);
Как это работает?
Вместо сортировки массива ваших элементов вы сортируете массив массивов, последним элементом которых является item, а first - ключ, по которому вы хотите отсортировать. После сортировки вы сохраняете только товар.
Вы можете использовать только sort
для сортировки массивов массивов, поскольку PHP сравнивает два массива одинаковой длины, сравнивая его элементы один за другим.
Сортировка по нескольким полям
Вы можете использовать более одного ключа сортировки, например, сортировать по количеству, и, если количество идентичных, учитывает URL. Вы можете сделать это, украсив несколько ключей в порядке важности, например:
$arr = array_map(create_function('$a', 'return array($a["count"], $a["name"], $a);'), $arr);
Почему это быстро
Этот способ может быть быстрее, чем при использовании usort
, поскольку он вызывает ваш пользовательский код только n раз для сортировки массива длины n. Сравнения во время сортировки выполняются с использованием встроенного компаратора, поэтому должны быть быстрыми. В usort
метод пользовательского компаратора вызывается несколько раз (более n раз) во время сортировки, и это может привести к замедлению работы.