2015-10-02 141 views
2

我有以下结构的阵列PHP交叉比较两个阵列

Array 
(
    [0] => Array 
    (
     [name] => John Wayne 
     [email] => [email protected] 
    ) 
    [1] => Array 
    (
     [name] => Bruce Lee 
     [email] => [email protected] 
    ) 
) 

我然后有一个第二阵列

Array 
(
    [0] => Array 
    (
     [name] => Group One 
     [members] => Array 
     (
      [0] => Lora Day 
      [1] => James McKay 
      [2] => John Wayne 
     ) 
    ) 
    [1] => Array 
    (
     [name] => Group Two 
     [members] => Array 
     (
      [0] => John Wayne 
      [1] => Bruce Lee 
      [2] => Brendon Shell 
     ) 
    ) 
) 

第一阵列将有与所有他们的电子邮件地址的用户。第二个数组包含所有组和组内的用户的名称。我需要做的是以某种方式让用户的电子邮件地址链接到他们的用户在一个组中。所以我正在想方设法创建第三个阵列

Array 
(
    [0] => Array 
    (
     [name] => Group One 
     [members] => Array 
     (
      [Lora Day] => [email protected] 
      [James McKay] => [email protected] 
      [John Wayne] => [email protected] 
     ) 
    ) 
    [1] => Array 
    (
     [name] => Group Two 
     [members] => Array 
     (
      [John Wayne] => [email protected] 
      [Bruce Lee] => [email protected] 
      [Brendon Shell] => [email protected] 
     ) 
    ) 
) 

什么是最好的方式来实现这一目标?我可以在文档array_diff_assoc中看到,但不太清楚在这种情况下我可以如何使用它?

感谢

+0

我认为你不能做,只能用'array_diff_assoc',你必须使用2循环或循环和'array_diff_assoc' –

+0

并张贴你的尝试 –

+0

那么,你有什么试过呢? – rocky

回答

2

不是最好的方式做到这一点,但是这将是这样做不和array_diff_assoc

foreach($secondarray as $key => $secondarrayinner){ 
    foreach($secondarrayinner['members'] as $innerkey => $row){ 
     foreach($firstarray as $row2){ 
      if($row2['name'] == $row){ 
       $secondarray[$key]['members'][$row2['name']] = $row2['email']; 
       unset($secondarray[$key]['members'][$innerkey]); 
      } 
     } 
    } 
} 

遍历两个阵列的一种方式,如果名字是一样的,将设置一个新的元件。该名称将被设置为关键字,并将值设置为电子邮件。之后,它取消旧的价值。这样,在没有电子邮件发现任何用户仍然会在那里

+0

完美谢谢,将以此为例创建我自己的 –

0

通过第二阵列和与之相匹配的名称,只是环创造新的一个使用两个的foreach

$arrayOne = array('0' => array('name' => 'John Wayne','email' => '[email protected]'), 

        '1' => array('name' => 'Bruce Lee','email' => '[email protected]') 
       ); 

$arrayTwo = array('0' => array('name' => 'Group One','members' => array('0'=>'Lora Day','1'=>'James McKay','2'=>'John Wayne')), 

        '1' => array('name' => 'Group Two','members' => array('0'=>'John Wayne','1'=>'Bruce Lee','2'=>'Brendon Shell')) 
       ); 

foreach($arrayTwo as $key=>$value){ 
    foreach($value['members'] as $ke=>$val){ 
     if($arrayOne[$key]['name']==$val){ 
      $arrayTwo[$key]['members'][$val] = $arrayOne[$key]['email']; 
      } 
      unset($arrayTwo[$key]['members'][$ke]); 
     } 
    } 

echo '<pre>';print_r($arrayTwo);