可能重复:
按值对多维数组排序 (2)
如何按其中的特定键对数组进行排序:
array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
这是一个数组,有几个数组,有 2 个值,我如何按每个数组的第二个值排序,所以结果是:
array(
array(5, 1),
array(5, 2),
array(3, 3),
array(5, 4)
);
可能重复:
按值对多维数组排序 (2)
如何按其中的特定键对数组进行排序:
array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
这是一个数组,有几个数组,有 2 个值,我如何按每个数组的第二个值排序,所以结果是:
array(
array(5, 1),
array(5, 2),
array(3, 3),
array(5, 4)
);
这是一种方法:
<?php
$input = array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
/**
* Funkily sort the input array.
*
* @param array $array
*
* @return array
*/
function funky_sort(array $array) {
//Get the array of the first elements
$first_elements = array_map(function($el) {
return $el[0];
}, $array);
//Get the array of the second elements
$second_elements = array_map(function($el) {
return $el[1];
}, $array);
//Sort the second elements only
sort($second_elements, SORT_NUMERIC);
//Combine both arrays to the same format as the original
$result = array();
for ($i = 0; $i < count($first_elements); $i++) {
$result[] = array($first_elements[$i], $second_elements[$i]);
}
//Fire away
return $result;
}
var_dump(funky_sort($input));
这里有一些方向不能解决你的问题(这种类型很奇怪),但可以引导你找到解决方案。您可以使用 usort 函数 ( http://www.php.net/manual/en/function.usort.php ) 并定义自己的比较器。
如果您知道排序逻辑,请将其添加到 cmp 函数中,如果两个元素相等则返回 0,如果 $a < $b 则返回 -1,否则返回 1。
代码将如下所示:
function cmp($a, $b)
{
if ($a[1] == $b[1]) {
return 0;
}
return ($a[1] < $b[1]) ? -1 : 1;
}
$a = array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
usort($a, "cmp");
<?php
function sort_by_second($randomArray)
{
$tmparray1=array();
$tmparray2=array();
foreach ($randomArray as $key=>&$ra) {
$tmparray1[$key]=$ra[1];
$tmparray2[$key]=$ra[0];
}
asort($tmparray1);
$rr=array();
foreach ($tmparray1 as $key=>&$val) {
$rr[$key]=array($tmparray2[$key],$val);
}
return $rr;}
$myArray = array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
$tt=sort_by_second($myArray);
print_r($tt);
?>