我如何通过其中的特定键对数组进行排序:
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)
);
答案 0 :(得分:2)
这是一种方法:
<?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));
答案 1 :(得分:1)
以下是一些无法解决问题的方法(排序很奇怪),但可以引导您找到解决方案。 您可以使用usort函数(http://www.php.net/manual/en/function.usort.php)并定义自己的比较器。
如果您知道排序逻辑,请将其添加到cmp函数,如果两个元素相等则返回0,如果$ a&lt; $ b和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");
答案 2 :(得分:-1)
<?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);
?>