【问题标题】:Sorting Multidimensional Arrays With Uasort使用 Uasort 对多维数组进行排序
【发布时间】:2014-02-20 04:54:51
【问题描述】:

目前我有一些看起来像这样的多维数组

Array ( 
    [71] => Array ( [author] => 2 [date] => 1392867376 ) 
    [49] => Array ( [author] => 2 [date] => 1392868188 ) 
    [75] => Array ( [author] => 14 [date] => 1392867388) 
    [67] => Array ( [author] => 2 [date] => 1392870805 ) 
)

我想按“日期”对它们进行排序,但我不知道如何。我试过这个:

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
uasort($visited, 'cmp');

但由于我不知道,也找不到关于如何使用“比较函数”的参考,所以我在太空中。我所能找到的只是非常模糊的东西。目前这是按“作者”排序的。

有人可以向我解释这些比较函数是如何工作的(或指向我的在线资源),并告诉我我需要做什么才能按“日期”对这个数组进行排序 - 同时保持所有键不变(键不得更改或删除)

非常感谢您提供的任何帮助。

PS:我已经尝试过 array_multisort - 它删除了我的密钥。

【问题讨论】:

  • 您可以使用 array_multi_sort() 函数,这会很有帮助
  • @Sundar 我确实尝试过,但无法成功。您将如何在主键都是随机数的动态情况下工作,就像我上面的例子一样?唯一没有真正弄乱我的钥匙的工作是uasort。因此我的问题。谢谢。
  • @SatishSharma 谢谢,但我实际上尝试了该链接,但根本无法使其工作。
  • var_dump($a, $b); 看看它们相等,而不是猜测

标签: php arrays sorting multidimensional-array array-difference


【解决方案1】:

试试这个 cmp 函数:

function cmp($a, $b) {
    if ($a['date'] == $b['date']) {
        return 0;
    }
    return ($a['date'] < $b['date']) ? -1 : 1;
}

它应该可以工作。

【讨论】:

    【解决方案2】:

    数组日期按升序排列

    <?php
    $a = array();
    $a[71] = Array ('author' => 2, 'date' => 1392867376 );
    $a[49] = Array ( 'author' => 14, 'date' => 1392868188 ) ;
    $a[75] = Array ( 'author' => 2, 'date' => 1392867388) ;
    $a[67] = Array ( 'author' => 2, 'date' => 1392870805 ) ;
    
    $date = array();
    
    // Obtain a list of columns
    foreach ($a as $key => $row) {
        $date[$key]  = $row['date'];    
    }
    
    //sort the array date ascending order
    array_multisort($date, SORT_ASC, $a);
    
    //array is sorted in ascending order
    print_r($a);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多