两个数组的交叉比较

时间:2016-07-08 13:55:41

标签: php arrays

我在交叉比较两个数组时遇到了一些麻烦。我有一个为我建立一组组的函数。然后我称之为

$groups = getGroups();

以上调用将输出如下内容

array(144) {
  [0]=>
  array(5) {
    ["GroupName"]=>
    string(4) "Group One"
    ["GroupEmail"]=>
    string(25) "groupOne@someEmail.com"
    [0]=>
    array(1) {
      ["GroupMember"]=>
      string(13) "John Doe"
    }
    [1]=>
    array(1) {
      ["GroupMember"]=>
      string(11) "Jane Murray"
    }
    [2]=>
    array(1) {
      ["GroupMember"]=>
      string(10) "Julie Wise"
    }
  }
  ...
}

然后我再做一次调用,通过

获取一些用户数据
$users = getUsers();

这个数组的输出是这样的

array(66) {
  [0]=>
  array(2) {
    ["UserName"]=>
    string(14) "John Doe"
    ["email"]=>
    string(27) "johnd@someEmail.com"
  }
  ...
}

我现在要做的是绑定2个数组。我的目标是获得类似以下输出的内容

Group One:  groupOne@someEmail.com, johnd@someEmail.com, janeMurray@someEmail.com, julieWise@someEmail.com

所以上面是

GroupName:  GroupEmail, GroupMember->email

所以我需要获取GroupMember组,与我的users数组中的UserName交叉检查,以获取他们的电子邮件。

这样的事情会成为可能吗?

由于

1 个答案:

答案 0 :(得分:1)


这应该适用于您的阵列。不明白你想要什么,但希望我猜对了。

foreach($groups as $groupKey=>$groupData)
{
    if(is_array($groupData))
    {
        foreach($groupData as $memberKey=>$memberData)
        {
            $res = array_search($memberData['GroupMember'],array_column($users, 'UserName'));
            if($res !== false) {
                $groups[$groupKey][$memberKey]['email'] = $users[$res]['email'];
            }
        }
    }
}

这将作为输出:

 array(3) {
  ["GroupName"]=>
  string(9) "Group One"
  ["GroupEmail"]=>
  string(22) "groupOne@someEmail.com"
  [0]=>
  array(2) {
    [0]=>
    array(2) {
      ["GroupMember"]=>
      string(8) "John Doe"
      ["email"]=>
      string(19) "johnd@someEmail.com"
    }
    [1]=>
    array(2) {
      ["GroupMember"]=>
      string(10) "Julie Wise"
      ["email"]=>
      string(19) "julie@someEmail.com"
    }
  }
}

希望这有帮助。
最好的祝福,
M.I。