【问题标题】:array_intersect, but for a sub-arrays of a single array variablearray_intersect,但对于单个数组变量的子数组
【发布时间】:2017-04-10 17:58:03
【问题描述】:

我有一个如下所示的数组:

$foo = array(
    0 => array('a', 'b', 'c', 'd'),
    1 => array('b', 'c', 'd'),
    2 => array('b', 'd', 'f')
)

我将 $foo[0]$foo[1]$foo[2] 称为子数组。

我基本上需要对$foo 中的所有 3 个子数组执行array_intersect()。结果应该是:

array('b', 'd')

因为所有三个子数组都有这些值。最好的方法是什么?

一些注意事项:

  • 总会有至少一个子阵列。没有上限。
  • 如果只提供一个子数组,它应该返回那个子数组
  • 如果所有子数组都没有公共值,则返回一个空数组
  • 如果这个功能已经作为 PHP 函数存在,我会 /facepalm

【问题讨论】:

标签: php arrays


【解决方案1】:
$intersect = call_user_func_array('array_intersect',$foo);

请注意,密钥是从 $foo[0] 中保留的

【讨论】:

  • 聪明的方法,我喜欢!如果$foo 至少有 2 个子数组,它可以正常工作,但如果只有一个则失败。我通过仅在count($foo) > 1 时调用上述内容来解决此问题。如果count($foo) == 1 我只返回唯一的子数组。谢谢!
  • 谢谢@ColinO'Dell $currencies = count($currencies) > 1 ? call_user_func_array('array_intersect', $currencies) : array_shift($currencies); 注意:我正在对 $currencies 进行类型转换(数组),以便 array_shift 返回 []
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多