【问题标题】:Sort multidimensional array by different values conditionally有条件地按不同的值对多维数组进行排序
【发布时间】:2016-05-14 20:07:10
【问题描述】:

我有下一个多维数组(它相当长,但我在这里复制了第一个元素):

[0] => Array
    (
        [cpt] => Product
        [tax] => Type A
        [year] => 2012
    )

[1] => Array
    (
        [cpt] => Product
        [tax] => Type B
        [year] => 2012
    )

[2] => Array
    (
        [cpt] => Product
        [tax] => Type C
        [year] => 2011
    )

[3] => Array
    (
        [cpt] => Product
        [tax] => Type C
        [year] => 2011
    )

[4] => Array
    (
        [cpt] => Product
        [tax] => Type D
        [year] => 2015
    )

[5] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2014
    )

[6] => Array
    (
        [cpt] => Review
        [tax] => Sample
        [year] => 2012
    )

[7] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2012
    )

[8] => Array
    (
        [cpt] => Review
        [tax] => Picture based
        [year] => 2015
    )

[9] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2012
    )

[10] => Array
    (
        [cpt] => Review
        [tax] => Picture based
        [year] => 2013
    )
[11] => Array
    (
        [cpt] => Template
        [tax] => L
        [year] => 2013
    )

[12] => Array
    (
        [cpt] => Template
        [tax] => L
        [year] => 2015
    )

[13] => Array
    (
        [cpt] => Template
        [tax] => M
        [year] => 2011
    )

[14] => Array
    (
        [cpt] => Template
        [tax] => S
        [year] => 2011
    )

我需要先按“cpt”值排序,然后按“tax”值,最后按“year”。

问题是“cpt”和“tax”的排序顺序应该是自定义顺序,而不是字母顺序。

好消息是:

  • 生成的数组始终按“cpt”完美排序(您可以 看)。所以我不在乎排序。
  • 我只需要应用这些排序更改(首先在“税”中,然后 "year" next) 用于特定的 "cpt",即 "Review"。

这是我的代码,但它无效,因为它也改变了“cpt”顺序。

$sort_tax = array("Sample","Figure","Picture based");
usort($the_array, function ($a, $b) use ($sort_tax) {
    $pos_a = array_search($a['tax'], $sort_tax);
    $pos_b = array_search($b['tax'], $sort_tax);
    $result = $pos_a - $pos_b;
    if ($result == 0) {
        $difference = $a['year'] - $b['year'];
        if ($difference >= 0) {
            $value = 0;
        } else {
            $value = 1;
        }
        return $value;
    } else {
        return $pos_a - $pos_b;
    }
});

有什么想法吗? 非常感谢!

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:
    $array = array();
    foreach($array_name as $arr){
      $array['cpt'] = $arr['cpt'];
      $array['tax'] = $arr['tax'];
      $array['year'] = $arr['year'];
    } 
    
    array_multisort($array['tax'], SORT_DESC, $array['year'], SORT_ASC,$Your_array_name);
    

    你可以从here查看array_multisort

    【讨论】:

    • 正如我在问题上写的:问题是“cpt”和“tax”的排序顺序应该是自定义顺序,而不是字母顺序
    猜你喜欢
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多