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

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

使用 usort ABC 值對(duì) PHP 阿雷進(jìn)行排序

使用 usort ABC 值對(duì) PHP 阿雷進(jìn)行排序

PHP
小唯快跑啊 2022-09-17 22:02:05
請(qǐng)幫助完成以下示例代碼。我正在嘗試進(jìn)行排序,使“B”在數(shù)組中排名最后。我已經(jīng)嘗試了很多方法。最初我和烏索特一起工作。但是為了調(diào)試,我已將其簡(jiǎn)化為usort。<?php$array = json_decode('[    {        "id": "222",        "name": "A",        "shouldgolast": "N"    },    {        "id": "261",        "name": "B",        "shouldgolast": "Y"    },    {        "id": "262",        "name": "C",        "shouldgolast": "N"    }]', true);usort($array, "sortF");foreach ($array as $details) {    echo $details["name"]."\n";}function sortF($a, $b){    if($a['shouldgolast'] == "Y"){        return 1;    }else if($b['shouldgolast'] == "Y"){        return 1;    }    return 0;}?>上面的輸出是BAC我希望B是最后一個(gè)。測(cè)試鏈接: https://www.tehplayground.com/DzqhjFq6lK9Zq9Ue也嘗試返回 -1 而不是 1(使 B 到第二個(gè)位置) 測(cè)試鏈接 2: https://www.tehplayground.com/ea51PWdFfkAupEsd
查看完整描述

4 回答

?
料青山看我應(yīng)如是

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

如果您只想將所有 s 移到末尾,則實(shí)際上不需要與 進(jìn)行比較,甚至不需要返回零或 -1。比較表達(dá)式真正需要的唯一邏輯是“如果$a應(yīng)該排在最后,請(qǐng)將其向下移動(dòng)。shouldgolast$a$b

usort($array, fn($a) => $a['shouldgolast'] === 'Y');


查看完整回答
反對(duì) 回復(fù) 2022-09-17
?
蝴蝶不菲

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

usort 函數(shù)作為第二個(gè)參數(shù)接收一個(gè)應(yīng)用作比較器的可調(diào)用參數(shù)。比較器通常以這種方式工作:

  • 返回 1 ->第一個(gè)元素大于第二個(gè)元素

  • 返回 -1 ->第 2 個(gè)元素大于第一個(gè)元素

  • 返回 0 ->兩個(gè)元素相同

您必須以這種方式校正比較器功能

function sortF($a, $b)

{

    if($a['shouldgolast'] == "Y"){

        return 1;

    }else if($b['shouldgolast'] == "Y"){

        return -1;

    }

    return 0;

}


查看完整回答
反對(duì) 回復(fù) 2022-09-17
?
慕村9548890

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

問題是你有返回的語句,我認(rèn)為邏輯不適合這種情況,它應(yīng)該根據(jù)可以應(yīng)用于你的情況的條件返回適當(dāng)?shù)闹担愕拇a應(yīng)該看起來像這樣:else if1


<?php

$array = json_decode('[

    {

        "shouldgolast": "222",

        "name": "A",

        "shouldgolast": "N"

    },

    {

        "id": "261",

        "name": "B",

        "shouldgolast": "Y"

    },

    {

        "id": "262",

        "name": "C",

        "shouldgolast": "N"

    }

]', true);


usort($array, "sortF");


foreach ($array as $details) {

    echo $details["name"]."\n";

}


function sortF($a, $b)

{

    if($a['shouldgolast'] == "Y"){

        return 1;

    }


    if($b['shouldgolast'] == "Y"){

        return -1;

    }


    return 0;

}

?>


查看完整回答
反對(duì) 回復(fù) 2022-09-17
?
蕭十郎

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

您無需對(duì)值進(jìn)行排序。


方法#1:


您只需使用指針即可將所有數(shù)組移動(dòng)到右側(cè)。這類似于荷蘭國(guó)旗算法,我們將項(xiàng)目分組在一起。shouldgolastY


片段:


$yes_ptr = count($array) - 1;


for($i = count($array) - 1; $i >= 0; -- $i){

    if($array[$i]['shouldgolast'] == 'Y'){

        $temp = $array[$yes_ptr];

        $array[$yes_ptr--] = $array[$i];

        $array[$i] = $temp;

    }

}

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


在上面的方法中,我們只保留一個(gè)指針,該指針指示當(dāng)前位置,其中應(yīng)插入任何新的即將到來。請(qǐng)注意,這將首先成功對(duì)所有內(nèi)容進(jìn)行分組,稍后再對(duì)所有內(nèi)容進(jìn)行分組。但是,這可能會(huì)更改具有值 的元素的內(nèi)部順序。yes_ptrYNYN


方法#2:


如果你想要一個(gè)穩(wěn)定的分組,意味著保持所有元素和元素的順序,你可以簡(jiǎn)單地將它們收集在2個(gè)不同的數(shù)組中,并做一個(gè)array_merge。NY


片段:


$no_array = [];

$yes_array = [];


foreach($array as $value){

    if($value['shouldgolast'] == 'N'){

        $no_array[] = $value;

    }else{

        $yes_array[] = $value;

    }

}


print_r(array_merge($no_array,$yes_array));

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


查看完整回答
反對(duì) 回復(fù) 2022-09-17
  • 4 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(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)