PHP按另一个数组中的特定键对数组进行排序[重复]
Posted
技术标签:
【中文标题】PHP按另一个数组中的特定键对数组进行排序[重复]【英文标题】:PHP sort arrays by specific key inside another array [duplicate] 【发布时间】:2012-10-04 08:42:27 【问题描述】:可能重复:Sort multidimensional Array by Value (2)
如何按里面的特定键对数组进行排序:
array(
array(5, 2),
array(5, 3),
array(3, 1),
array(5, 4)
);
这是一个数组,有几个数组,有两个值,我如何按每个数组的第二个值排序,所以结果是:
array(
array(5, 1),
array(5, 2),
array(3, 3),
array(5, 4)
);
【问题讨论】:
希望对您有所帮助,但请查看How do I sort a multidimensional array in php 这个问题的措辞可以更好。它因重复而被关闭,因为它与列出的问题之间的差异不易辨别。 【参考方案1】:这里有一些方向不能解决您的问题(这种类型很奇怪),但可以引导您找到解决方案。 您可以使用 usort 函数 (http://www.php.net/manual/en/function.usort.php) 并定义自己的比较器。
如果你知道你的排序逻辑,将其添加到 cmp 函数中,如果两个元素相等则返回 0,如果 $a
代码如下所示:
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");
【讨论】:
您的第一个输出将是array(3, 1)
而不是array(5, 1)
所要求的
感谢您指出这一点 :) 我正在为他的问题提供指导,以便他可以根据需要定义 cmp 函数
在人们开始对你投反对票之前,你的答案就是这样......
@RadoslavGeorgiev:问题是,这不是正确的方向。好好看看这个问题。这不是你每天都会“为我排序这个数组”的问题。
@Osa:我以为你不想改变第一组元素的位置。要么我很困惑,要么你很困惑,后者更有可能。【参考方案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【参考方案3】:<?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);
?>
【讨论】:
以上是关于PHP按另一个数组中的特定键对数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章