4 回答

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');

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;
}

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;
}
?>

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
- 4 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)