【问题标题】:Closure with confusing usort用混乱的排序关闭
【发布时间】:2015-04-23 00:02:57
【问题描述】:

我正在尝试重写一个共同开发者的脚本并遇到了这个小宝石,我一生都无法理解它的作用,更不用说如何重构它了。有人可以向我解释它的作用,以及我对他的代码的解释是否正确?

原代码:

$f = "return (${$v[0]}['{$k}'] - ${$v[1]}['{$k}']);";
usort($results, create_function('$a,$b',$f));

我的尝试并将其重写为闭包:

$f = function ($k,$v)
{
    return ($v[0][$k] - $v[1][$k]);
};

usort($results, $f($k, $v));

编辑

为了清楚起见,$k 是随机字符串,$v['a','b']['b','a'] 的数组

我真的不知道尝试是什么,也许是这个?

usort($results, function () USE ($k,$v) 
{
    return ($v[0][$k] - $v[1][$k]);
});

【问题讨论】:

  • usort($results, $f('$a,$b')); --- 你在这里做什么:你调用一个函数并向它传递一个字符串参数(虽然它需要传递 2 个参数)。不要把它放在变量中,而是在原地创建它,你会没事的。
  • “也许是这个?” --- 可能就是这样。你的问题是什么?
  • 我正在尝试将他所做的更改为更具可读性的内容,因为我不明白这是什么尝试,就像他在尝试加权函数一样。如果您不理解尝试,很难解释它
  • 那么,你到底有什么不明白的?你不明白create_function 的工作原理吗?

标签: php closures usort


【解决方案1】:

你只需要这样做

$f = function ($k,$v)
{
    return ($v[0][$k] - $v[1][$k]);
};

usort($results, $f);

在 php.net 中了解更多关于 Closuresusort 的信息

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 2011-03-01
    • 2021-10-25
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多