array_intersect,但是对于单个数组变量的子数组

Col*_*ell 9 php arrays

我有一个看起来像这样的数组:

$foo = array(
    0 => array('a', 'b', 'c', 'd'),
    1 => array('b', 'c', 'd'),
    2 => array('b', 'd', 'f')
)
Run Code Online (Sandbox Code Playgroud)

我将把$foo[0],$foo[1]以及$foo[2]作为子阵列.

我基本上需要array_intersect()在所有3个子阵列中执行$foo.结果应该是:

array('b', 'd')
Run Code Online (Sandbox Code Playgroud)

由于所有三个子阵列都具有这些共同的值.做这个的最好方式是什么?

一些考虑:

  • 总会有至少一个子阵列.没有上限.
  • 如果只提供一个子数组,则应该返回该子数组
  • 如果所有子数组中没有任何公共值,则应返回空数组
  • 如果此功能已作为PHP函数存在,我将/ facepalm

Mar*_*ker 29

$intersect = call_user_func_array('array_intersect',$foo);
Run Code Online (Sandbox Code Playgroud)

请注意,密钥保存在$ foo [0]

  • 聪明的做法,我喜欢它!如果`$ foo`至少有2个子数组,它可以正常工作,但如果只有一个,则会失败.如果`count($ foo)> 1`,我只通过调用上面的方法来解决这个问题.如果`count($ foo)== 1`我只返回唯一的子数组.谢谢! (4认同)