第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

對(duì)具有棘手條件的多維數(shù)組進(jìn)行排序

對(duì)具有棘手條件的多維數(shù)組進(jìn)行排序

PHP
慕工程0101907 2022-01-14 15:41:01
我是 php 的新手。我正在嘗試對(duì)具有某些條件的多維數(shù)組進(jìn)行排序,但我不知道從哪里開始。用戶數(shù)組Array(    [0] => Array        (            [uid] => 1            [Fname] => Kcir            [Lname] => Nayr            [wins] => 12            [scoreGuess] => 45            [totalScore] => 26        )    [1] => Array        (            [uid] => 2            [Fname] => Doe            [Lname] => John            [wins] => 12            [scoreGuess] => 35            [totalScore] => 26        )    [2] => Array        (            [uid] => 3            [Fname] => Greg            [Lname] => Cuenca            [Nickname] => Greg            [wins] => 11            [scoreGuess] => 21            [totalScore] => 26        )    [3] => Array        (            [uid] => 4            [Fname] => Kenneth            [Lname] => Agee            [wins] => 12            [scoreGuess] => 34            [totalScore] => 26        ))首先,我需要通過wins按降序?qū)τ脩暨M(jìn)行排序,然后如果有用戶與wins綁定,則綁定用戶將通過scoreGuess排序,但有一個(gè)條件。如果scoreGuess是totalScore上最接近的,那么該用戶將是最高的。例如:用戶1、2和3并列獲得12勝,總得分為26。用戶 1的 scoreGuess 為45用戶 2的 scoreGuess 為35用戶 4的 scoreGuess 為34所以最高的是用戶 4,因?yàn)樗?scoreGuess 最接近。我已經(jīng)嘗試過此代碼,但無法正常工作。function compareUsers($a, $b){            if($a['wins'] > $b['wins'])            {                return -1;            }            else if ($a['wins'] == $b['wins']) {                $a_diff = (int) $a['totalScore'] - (int)$a['scoreGuess'];                $b_diff = (int) $b['totalScore'] - (int) $b['scoreGuess'];                if ( $a_diff >= 0 && $b_diff >= 0 ) {                    if ( $a_diff < $b_diff ) {                        return -1;                    }                } else if ( $a_diff >= 0 && $b_diff < 0 ) {                    return 0;                } else {                    return 1;                }            }            else            {                return 1;            }}usort($users, "compareUsers");
查看完整描述

2 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

好的,你可以讓它更簡單,如下所示:


usort($arr,function($data1,$data2){

    if($data1['wins'] != $data2['wins']) return -1 * ($data1['wins'] - $data2['wins']);

    return abs($data1['scoreGuess'] - $data1['totalScore']) - abs($data2['scoreGuess'] - $data2['totalScore']);

});

演示: https ://3v4l.org/KCuf9


我們看看winsset 是否與其他 set 相等wins。

如果它們不相等,我們返回兩者的差乘以-1降序排列。

scoreGuess如果它們相等,我們?nèi)『椭g差異的絕對(duì)值之差totalScore。


查看完整回答
反對(duì) 回復(fù) 2022-01-14
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

嘗試使用以下解決方案usort,當(dāng)獲勝次數(shù)不同時(shí),按獲勝次數(shù)排序。當(dāng)獲勝次數(shù)相等時(shí),使用 totalScore 和 scoreGuess 之間的差值進(jìn)行排序。


$array = [

    0 => [    

        'uid' => 1,

        'Fname' => 'Kcir',

        'Lname' => 'Nayr',

        'wins' => 12,

        'scoreGuess' => 45,

        'totalScore' => 26,

    ],

    1 => [

        'uid' => 2,

        'Fname' => 'Doe',

        'Lname' => 'John',

        'wins' => 12,

        'scoreGuess' => 35,

        'totalScore' => 26,

    ],

    2 => [

        'uid' => 3,

        'Fname' => 'Greg',

        'Lname' => 'Cuenca',

        'Nickname' => 'Greg',

        'wins' => 11,

        'scoreGuess' => 21,

        'totalScore' => 26,

    ],

    3 => [

        'uid' => 4,

        'Fname' => 'Kenneth',

        'Lname' => 'Agee',

        'wins' => 12,

        'scoreGuess' => 34,

        'totalScore' => 26,

    ],

];


usort($array, function($prev, $next) {

     if ($next['wins'] == $prev['wins']) {

          return abs($prev['scoreGuess'] - $prev['totalScore']) <=> abs($next['scoreGuess'] - $next['totalScore']);

     } else {

          return $next['wins'] <=> $prev['wins'];

     }

});

結(jié)果是:


Array

(

    [0] => Array

        (

            [uid] => 4

            [Fname] => Kenneth

            [Lname] => Agee

            [wins] => 12

            [scoreGuess] => 34

            [totalScore] => 26

        )


    [1] => Array

        (

            [uid] => 2

            [Fname] => Doe

            [Lname] => John

            [wins] => 12

            [scoreGuess] => 35

            [totalScore] => 26

        )


    [2] => Array

        (

            [uid] => 1

            [Fname] => Kcir

            [Lname] => Nayr

            [wins] => 12

            [scoreGuess] => 45

            [totalScore] => 26

        )


    [3] => Array

        (

            [uid] => 3

            [Fname] => Greg

            [Lname] => Cuenca

            [Nickname] => Greg

            [wins] => 11

            [scoreGuess] => 21

            [totalScore] => 26

        )


)



查看完整回答
反對(duì) 回復(fù) 2022-01-14
  • 2 回答
  • 0 關(guān)注
  • 201 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)