2 回答

TA貢獻1865條經驗 獲得超7個贊
您可以使用匿名函數來代替:
$compare = function ($a, $b) use ($arguments, $c) {
? ? return strcasecmp($a[$arguments[$c]], $b[$arguments[$c]]);
};
未經測試但應該足夠接近
該use關鍵字允許您從函數內的父作用域繼承變量。

TA貢獻1921條經驗 獲得超9個贊
首先,我會說,如果您有能力將其硬編碼到腳本中:
$alliances?=?array_alternate_multisort($alliances,?"output",?SORT_DESC,?"score",?SORT_DESC);
那么你可以輕松地完全廢棄你的自定義函數,只需編寫以下內容:
代碼:(演示)
array_multisort(...[
? ? array_column($alliances, 'output'),
? ? SORT_DESC,
? ? array_column($alliances, 'score'),
? ? SORT_DESC,
? ? &$alliances
]);
這將完成您的自定義函數將執行的所有操作,甚至更多,而無需引入任何自定義函數。
這是一種非常簡潔、完全原生且易于閱讀的技術。使用這個意味著:
您不會將腳本限制為僅
SORT_ASC
和SORT_DESC
;?對于特定場景,還有其他有用的排序標志。SORT_ASC
如果您想使用(默認排序標志),您可以選擇省略排序方向參數。您可以像其他本機排序函數一樣通過引用修改輸入數組。
現在,超出上述范圍的任何內容都會引入不必要的卷積。為了使這個假設(我再次不認可)演示簡單,我堅持認為需要排序方向標志,就像原始片段中一樣。
代碼:(演示)
function array_alternate_multisort($array, ...$args) {
? ? foreach ($args as $i => $arg) {
? ? ? ? $sortParams[] = $i & 1 ? $arg : array_column($array, $arg);
? ? }
? ? $sortParams[] = &$array;
? ? array_multisort(...$sortParams);
? ? return $array;
}
& 1
是按位奇數檢查。如果索引為奇數,則將常量壓入$sortParams
,否則將列數據壓入$sortParams
。
- 2 回答
- 0 關注
- 185 瀏覽
添加回答
舉報