【问题标题】:PHP array_merge or array_unique and closuresPHP array_merge 或 array_unique 和闭包
【发布时间】:2013-03-19 04:50:18
【问题描述】:

我能否在 PHP >=5.4 中使用闭包合并数组或从数组中删除重复项,其方式与在 Objective C 中使用块或在 C++ 中使用 lambda 的方式相同?

  • 是否可以使用谓词/闭包/块/lambda 作为此类函数的参数。

即:

$a = array('blah','bleh');
$b = array('blih, 'bloh');
$arr = array_merge( function() use (&$a,&$b) { return $a == $b ? true : false; } );

(上面的例子过于简单,我想为对象做这个)。

  • 可以内联完成还是我应该总是将闭包定义为 变量?
  • 是否有性能提升,还是运行相同?

【问题讨论】:

  • 您可能会使用带有闭包的 array_filter 来消除重复项;是的,对象数组完全有可能
  • 谢谢@MarkBaker 的回答,你会得到荣誉的 :) 顺便说一句,这是正确的语法吗?
  • @Alex .. 预期的输出是什么,因为您想合并而不是过滤...?
  • @Baba 在这种情况下是我希望没有重复的合并对象数组的数组。
  • 那么,array_unique(array_merge())?

标签: php arrays closures


【解决方案1】:

您可能可以为此使用 array_filter()。我的猜测是您需要过滤 1 个数组作为参数并将第二个数组添加为 use()。当当前值不在use()传入的数组中时,可以添加。 http://php.net/manual/en/function.array-filter.php

仅当您需要根据对象 ofc 中的值进行检查时才这样做,因为 $a == $b 对于对象可能会很棘手;)

【讨论】:

  • 嗯,这很有趣。感谢您链接这个,我看到他们已经使用了一个函数回调,我想我也可以将一个闭包传递给这个?感谢最干净的解决方案
  • 闭包和可调用对象在 PHP 中有点偏离。这是有关可调用对象的更多信息。 php.net/manual/en/language.types.callable.php 从 5.4 开始,添加了 Callable 类型,并从 5.3 开始添加了闭包。在此之前,您拥有允许将“function_name”或数组($my_obj,“method_name”)伪造为“可调用”参数的特定函数。
猜你喜欢
  • 2011-06-07
  • 2023-03-27
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多