【问题标题】:sort array by number of child of a key按键的子项数对数组进行排序
【发布时间】:2022-01-13 19:14:11
【问题描述】:

我有这样的东西来检查用户与其他人相比有多少相同的联系人,所以我将它保存在重复号码下。我想问一下有没有通过计算“duplicate_number”中的孩子数量来排序?在 PHP 中?

         {
            "user_id": 134,
            "duplicate_number": [
                {
                    "contact_name": "A",
                    "contact_no": "2341211",
                    "compared_name": "B"
                },
                {
                    "contact_name": "C",
                    "contact_no": "0236232",
                    "compared_name": "D"
                },
                {
                    "contact_name": "E",
                    "contact_no": "32326",
                    "compared_name": "F"
                }
            ]
        },
        {
            "user_id": 119,
            "duplicate_number": []
        },
        {
            "user_id": 108,
            "duplicate_number": [
                {
                    "contact_name": "G",
                    "contact_no": "053183",
                    "compared_name": "H"
                }
            ]
        },

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    您可以为此使用usort,并基于duplicate_number 列表中的项目数,例如:

    $list = [ 
        [
            "user_id" => 134,
            "duplicate_number" => [
                [ "contact_name"=> "A", "contact_no" => "2341211","compared_name" => "B" ],
                [ "contact_name" => "C", "contact_no" => "0236232", "compared_name" => "D" ],
                [ "contact_name" => "E", "contact_no" => "32326", "compared_name" => "F" ]
            ]
        ],
        [
            "user_id"=> 119,
            "duplicate_number"=> []
        ],
        [
            "user_id"=> 108,
            "duplicate_number"=> [
                [ "contact_name"=> "G", "contact_no"=> "053183", "compared_name"=> "H" ]
            ]
        ]
    ];
    
    function cmp( $a, $b) {
        if ( count( $a['duplicate_number'] ) === count( $b['duplicate_number'] ) ) {
            return 0;
        }
        return count( $a['duplicate_number'] ) < count( $b['duplicate_number'] ) ? -1 : 1;
    }
    
    usort( $list, 'cmp' );
    print_r( $list );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多