【问题标题】:sort array on specific value with php [duplicate]使用php根据特定值对数组进行排序[重复]
【发布时间】:2017-08-11 11:35:02
【问题描述】:

我有一个包含特定值的数组,我想根据其中的特定值对数组进行排序。例如,TOTCOM_METIER DESC。 例如:

Array
(
[0] => Array
    (
        [TOTCOM_METIER] => 1
        [metier] => Traiteur
    )

[1] => Array
    (
        [TOTCOM_METIER] => 4
        [metier] => Restauration traditionnelle
    )

[2] => Array
    (
        [TOTCOM_METIER] => 2
        [metier] => Coiffure
    )

)

我想在 TOTCOM_METIER DESC 上对其进行排序以获得这个结果:

Array
(
[0] => Array
    (
        [TOTCOM_METIER] => 4
        [metier] => Restauration traditionnelle
    )

[1] => Array
    (
        [TOTCOM_METIER] => 2
        [metier] => Coiffure
    )

[2] => Array
    (
        [TOTCOM_METIER] => 1
        [metier] => Traiteur
    )

)

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:
    <?php
    
    $arr = Array(
        0 => Array
            (
                'TOTCOM_METIER' => 1,
                'metier' => 'Traiteur'
            ),
        1 => Array
            (
                'TOTCOM_METIER' => 4,
                'metier' => 'Restauration traditionnelle'
            ),
        2 => Array
            (
                'TOTCOM_METIER' => 2,
                'metier' => 'Coiffure'
            )
    );
    
    //define custom "comparator" (in reverse order)
    function cmp($a, $b){
        $key = 'TOTCOM_METIER';
        if($a[$key] < $b[$key]){
            return 1;
        }else if($a[$key] > $b[$key]){
            return -1;
        }
        return 0;
    }
    usort($arr, "cmp");
    
    print_r($arr);
    
    ?>
    

    【讨论】:

    • 就像一个魅力!谢谢
    • 在 PHP >= 7 中,您还可以将所有 if 和返回更改为 return $a[$key] &lt;=&gt; $b[$key];,感谢 spaceship operator
    【解决方案2】:

    试试这个,

    function compare($a, $b)
    {
       return ($a['TOTCOM_METIER']< $b['TOTCOM_METIER']);
    }
    usort($your_array, "compare");
    

    这里是 usort 文档,其中声明 使用用户定义的比较函数按值对数组进行排序

    【讨论】:

      【解决方案3】:

      您如何获得这些数据?如果你从数据库系统中选择,你可以在你的选择sql中使用order by TOTCOM_METIER desc

      【讨论】:

        【解决方案4】:

        这样你可以传递你想要的顺序,“desc”或“asc”

        function sortAsc($a, $b) {
           return ($a[TOTCOM_METIER] < $b[TOTCOM_METIER]);
        }
        
        function sortDesc($a, $b) {
           return ($a[TOTCOM_METIER] > $b[TOTCOM_METIER]);
        }
        
        function sortMyArray($array, $order = "asc") {
            if($order === "desc") {
                return usort($array, "sortDesc");
            }
        
            return usort($array, "sortAsc");
        }
        
        // Call it like
        sortMyArray($array, "asc");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-28
          • 1970-01-01
          • 2016-11-18
          • 2013-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多