PHP根据另一个数组中的特定键对数组进行排序
可能重复:PHP根据另一个数组中的特定键对数组进行排序,php,arrays,sorting,debian,Php,Arrays,Sorting,Debian,可能重复: 如何按数组中的特定键对数组进行排序: 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) ); 这里有一些不会解决你的问题的方向(排序很奇怪),但可以引导你找到解决方案。 您
如何按数组中的特定键对数组进行排序:
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)
);
这里有一些不会解决你的问题的方向(排序很奇怪),但可以引导你找到解决方案。 您可以使用usort函数()并定义自己的比较器 如果知道排序逻辑,请将其添加到cmp函数中,如果两个元素相等,则返回0,-1(如果$a<$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");
函数cmp($a,$b)
{
如果($a[1]=$b[1]){
返回0;
}
回报($a[1]<$b[1])?-1:1;
}
$a=数组(
阵列(5,2),
阵列(5,3),
阵列(3,1),
阵列(5,4)
);
usort($a,“cmp”);
这里有一种方法:
<?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));
你的第一个输出将是数组(3,1)
而不是数组(5,1)
谢谢你指出:)我正在为他的问题给出方向,这样他就可以定义cmp函数,但他需要在人们开始投票给你之前对你的答案做出解释…@RadoslavGeorgiev:问题是,这不是正确的方向。好好看看这个问题。这不是你每天都要问的“为我排序这个数组”的问题。@Osa:我以为你不想更改第一组元素的位置。要么我糊涂了,要么你糊涂了,后者更可能。我希望这对你有所帮助,但看看这个问题的措辞可能会更好。它以副本的形式关闭,因为它与列出的问题之间的差异不容易识别。这实际上得到了所需的输出+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);
?>