如何在没有手动迭代的情况下交叉多维数组?

时间:2013-10-09 10:06:38

标签: php arrays multidimensional-array

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

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函数之一,但是我坚持使用它,并且无法找到解决方案而不是手动迭代数组。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

确切的解决方案取决于你想要发生什么,如果两个数组不是完全匹配关键,但是达到你想要的结果的一种方法是:

$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中出现(作为键)的元素。