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 关注
- 136 浏览
添加回答
举报