亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態 array_multisort() 而不調用已棄用的函數 create_function()

動態 array_multisort() 而不調用已棄用的函數 create_function()

PHP
繁花如伊 2023-07-01 17:47:18
我在舊的 php5 代碼中有這個函數,它將接受可變數量的參數并根據參數執行排序:function array_alternate_multisort(){    $arguments = func_get_args();    $arrays     = $arguments[0];    for ($c = (count($arguments)-1); $c > 0; $c--)    {        if (in_array($arguments[$c], array(SORT_ASC , SORT_DESC)))        {                continue;        }        $compare = create_function('$a,$b','return strcasecmp($a["'.$arguments[$c].'"], $b["'.$arguments[$c].'"]);');        usort($arrays, $compare);        if ($arguments[$c+1] == SORT_DESC)        {                $arrays = array_reverse($arrays);        }    }    return $arrays ;}我這樣稱呼它:$alliances = array_alternate_multisort($alliances, "output", SORT_DESC, "score", SORT_DESC);如何在不調用的情況下用函數替換它create_function()?
查看完整描述

2 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

您可以使用匿名函數來代替:

$compare = function ($a, $b) use ($arguments, $c) {

? ? return strcasecmp($a[$arguments[$c]], $b[$arguments[$c]]);

};

未經測試但應該足夠接近


該use關鍵字允許您從函數內的父作用域繼承變量。


查看完整回答
反對 回復 2023-07-01
?
郎朗坤

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_ASCSORT_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。


查看完整回答
反對 回復 2023-07-01
  • 2 回答
  • 0 關注
  • 185 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號