PHP sort multidimensional array with primary & secondary keys

后端 未结 4 523
无人共我
无人共我 2021-01-13 11:17

How do you sort a multidimensional array by primary and secondary key? For example, assuming the following array:

$result = array();

$result[0][\"prio\"] =          


        
相关标签:
4条回答
  • 2021-01-13 12:06

    PHP doesn't have a built-in function to do complex sorting like this, so you'll need to do a usort(), which allows you to sort items using a function that specifies your own criteria.

    The example given on the PHP manual page is almost an exact match for what you want to achieve.

    0 讨论(0)
  • 2021-01-13 12:17

    You may use usort() to define custom sort function.
    Here's an example

    <?php
    function cmp($a, $b)
    {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    
    $a = array(3, 2, 5, 6, 1);
    
    usort($a, "cmp");
    
    foreach ($a as $key => $value) {
        echo "$key: $value\n";
    }
    ?>
    

    The output will be

    0: 1
    1: 2
    2: 3
    3: 5
    4: 6
    

    More info can be found at http://www.php.net/manual/en/function.usort.php
    It should help you get started.

    0 讨论(0)
  • 2021-01-13 12:19

    Use usort like this:

    $result = array();
    
    $result[0]["prio"] = 1;
    $result[0]["date"] = '2010-02-28';
    $result[0]["post"] = "February's thoughts";
    
    $result[1]["prio"] = 0;
    $result[1]["date"] = '2010-04-20';
    $result[1]["post"] = "April's thoughts";
    
    $result[2]["prio"] = 0;
    $result[2]["date"] = '2010-05-30';
    $result[2]["post"] = "May's thoughts";
    
    function fct($a ,$b) {
    
      if ($a['prio'] < $b['prio']) {
        return -1;
      } elseif  ($a['prio'] > $b['prio']) {
        return 1;
      } else {
        return strcmp($b['date'], $a['date']);
      }
    
    }
    
    usort($result, "fct");
    print_r($result);
    

    Output:

    Array
    (
        [0] => Array
            (
                [prio] => 0
                [date] => 2010-05-30
                [post] => May's thoughts
            )
    
        [1] => Array
            (
                [prio] => 0
                [date] => 2010-04-20
                [post] => April's thoughts
            )
    
        [2] => Array
            (
                [prio] => 1
                [date] => 2010-02-28
                [post] => February's thoughts
            )
    
    )
    
    0 讨论(0)
  • 2021-01-13 12:21

    array_multisort() should give you the functionality that you need... use Example #3 from the PHP documentation as the basis for your sort, although you'll need to convert those date strings to a datestamp value before executing the sort.

    If this data has come from a database query though, it's far easier to sort it within the sql query used to retrieve the information.

    0 讨论(0)
提交回复
热议问题