如何在不手动迭代的情况下与多维数组相交


How to intersect multidimensional arrays without manual iteration?

我有两个多维数组,例如:

array(
  'a' => array(
    'code1' => array('v1', 'v2'),
    'code2' => array('v1', 'v2')
  ),
  'b' => array(
    'code3' => array('v1', 'v2'),
    'code4' => array('v1', 'v2'),
    'code5' => array('v1', 'v2'),
    'code6' => array('v1', 'v2')
  )
)

array(
  'a' => array(
    'code1' => '',
  ),
  'b' => array(
    'code5' => ''
  )
)

我想要的结果是:

array(
  'a' => array(
    'code1' => array('v1', 'v2')
  ),
  'b' => array(
    'code5' => array('v1', 'v2')
  )
)

我很确定使用内置的 php 函数之一是可能的,但是我坚持使用它,并且找不到解决方案而不是手动遍历数组。你能帮我吗?

如果两个数组在键上不完全匹配,确切的解决方案将取决于您想要发生的情况,但达到所需结果的一种方法是:

$a = array(
  'a' => array(
    'code1' => array('v1', 'v2'),
    'code2' => array('v1', 'v2')
  ),
  'b' => array(
    'code3' => array('v1', 'v2'),
    'code4' => array('v1', 'v2'),
    'code5' => array('v1', 'v2'),
    'code6' => array('v1', 'v2')
  )
);
$b = array(
  'a' => array(
    'code1' => '',
  ),
  'b' => array(
    'code5' => ''
  )
);
$result = array();
foreach ($a as $key => $data) {
    $result[$key] = array_intersect_key($data, $b[$key]);
}

这个想法是使用array_intersect_key仅保留那些元素$a出现在$b中(作为键(。