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按另一个数组中的特定键对数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

沿特定轴按另一个数组对 numpy 数组进行排序

使用字典中的键对对象数组进行排序

PHP 通过其中一个键对二维数组进行排序

使用特定键对 NSArray 进行排序

Java按整数字段对对象数组进行排序,如果它们相同,则按另一个整数值排序

在 PHP 中按整数键对对象进行排序