【问题标题】:Php sort multidimensional array by special criterionphp按特殊标准对多维数组进行排序
【发布时间】:2020-04-14 14:30:05
【问题描述】:

我有一个这样的数组:

$leadsArr = [
        0=>[
            0=>[
                'code'=>'Code1',
                'percentage'=>'',
            ] ,
            1=>[
                'code'=>'Code1',
                'percentage'=>''
            ]
        ],

        1=>[
            0=>[
                'code'=>'Code2',
                'percentage'=>'',
            ] ,
            1=>[
                'code'=>'Code2',
                'percentage'=>''
            ] ,
            2=>[
                'code'=>'Code2',
                'percentage'=>''
            ]
        ],

        3=>[
            0=>[
                'code'=>'Code3',
                'percentage'=>'25',
            ] ,
            1=>[
                'code'=>'Code3',
                'percentage'=>''
            ] ,
        ]
    ];

我需要按空“百分比”值的最高数量对该数组进行排序。 所以结果必须是 1,0,2(数组索引)。 请帮助我,我该怎么做?谢谢

【问题讨论】:

  • 没有2...
  • 到目前为止,您为自己尝试了什么?

标签: php arrays sorting multidimensional-array


【解决方案1】:

您可以使用uasort 来满足您的要求。试试这个-

uasort($leadsArr, function($a, $b) {
    $countA = 0;
    $countB = 0;

    foreach ($a as $v)
    {
        if ($v['percentage'] === '') $countA++;
    }

    foreach ($b as $v)
    {
        if ($v['percentage'] === '') $countB++;
    }

    return $countB - $countA;
});

或者,您也可以使用array_filter 而不是foreach 来获得结果。

uasort($leadsArr, function($a, $b) {
    $countA = 0;
    $countB = 0;

    $countA = count(array_filter($a, function($x) {
        return $x['percentage'] === '';
    }));

    $countB = count(array_filter($b, function($x) {
        return $x['percentage'] === '';
    }));

    return $countB - $countA;
});

【讨论】:

  • 谢谢。但是我怎样才能保留数组键?
  • 好的,认为需要使用uasort
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
相关资源
最近更新 更多