sort
и его двоюродные братья имеют варианты, в которых вы можете предоставить собственную функцию обратного вызова сортировки: usort
, uasort
(которая поддерживает индексы) и uksort
(который сортирует по ключам. Вам придется создать свой собственный обратный вызов сортировки, чтобы сделать то, что вы хотите сделать здесь.
function sort_by_subarray($a, $b)
{
// $a and $b are elements of $array that are being compared against
// each other to be sorted
if (!isset($a[1]) || !isset($b[1]))
{
// Do something if $a[1] or $b[1] is undefined
// Your question doesn't define what the behaviour here should be
}
else
{
if ($a[1] == $b[1]) return 0; // the elements are the same
return ($a[1] < $b[1]) ? -1 : 1; // otherwise, sort from lowest to highest
}
}
$array = array(
array(1, 8, 2),
array(5, 6, 15),
array(-8, 2, 1025)
);
uasort($array, "sort_by_subarray");
/* Results in:
Array
(
[2] => Array
(
[0] => -8
[1] => 2
[2] => 1025
)
[1] => Array
(
[0] => 5
[1] => 6
[2] => 15
)
[0] => Array
(
[0] => 1
[1] => 8
[2] => 2
)
)
*/
Обратите внимание, что мойФункция сортирует два подмассива как равные, если $ subarray [1] равен, поэтому, если вы хотите быть более конкретным, вы можете добавить больше правил, когда $a[1] == $b[1]
.