为了账号安全,请及时绑定邮箱和手机立即绑定

从其他2个数组构造一个关联数组,并通过一个公共键链接

从其他2个数组构造一个关联数组,并通过一个公共键链接

PHP
沧海一幻觉 2021-05-13 13:30:02
问题:我想将2个关联数组组合成一个。要链接这些阵列,两个中都存在ID密钥。输入:要使用api调用来检索我的联系人,我必须执行2个请求:首先使用ID检索联系人,并通过电子邮件发送地址,然后获取一些信息,例如姓名,城市等。第一个返回这样的数组:$contactArray = array(    array(        "CreatedAt" => "2019-04-12T11:53:26Z",        "DeliveredCount" => 0,        "Email" => "terry@example.org",        "ExclusionFromCampaignsUpdatedAt" => "2019-04-28T09:21:35Z",        "ID" => 1864410583,        "IsExcludedFromCampaigns" => false,        "IsOptInPending" => false,        "IsSpamComplaining" => false,        "LastActivityAt" => "2019-04-28T09:21:35Z",        "LastUpdateAt" => "2019-04-28T09:21:35Z",        "Name" => "",        "UnsubscribedAt" => "",        "UnsubscribedBy" => ""    ),    array(        "CreatedAt" => "2019-04-12T12:39:30Z",        "DeliveredCount" => 0,        "Email" => "duane@example.org",        "ExclusionFromCampaignsUpdatedAt" => "",        "ID" => 1864410588,        "IsExcludedFromCampaigns" => false,        "IsOptInPending" => false,        "IsSpamComplaining" => false,        "LastActivityAt" => "2019-04-12T12:39:30Z",        "LastUpdateAt" => "2019-04-12T12:39:30Z",        "Name" => "",        "UnsubscribedAt" => "",        "UnsubscribedBy" => ""    ));第二次调用,返回一个类似的数组$contactDataArray =        array(            array(                "ContactID" => 1864410583,                "Data" => array(                    array(                        "Name" => "firstname",                        "Value" => "Mark"                    ),                    array(                        "Name" => "city",                        "Value" => "Miami"                    ),                    array(                        "Name" => "name",                        "Value" => "Terry"                    ),                    array(                        "Name" => "phone",                        "Value" => "555-5555"                    )                ),                "ID" => 1864410583            ),在中$contactArray,ID键与ContactID键和ID中的ID键匹配$contactDataArray
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

对于PHP> = 7.1,可以使用list()使用数组解构

<?php 


$output = [];


foreach ($contactDataArray as [

    'ID' => $id,

    'Data' => [

        ['Name' => $firstnameKey, 'Value' => $firstnameValue],

        ['Name' => $cityKey, 'Value' => $cityValue],

        ['Name' => $nameKey, 'Value' => $nameValue],

        ['Name' => $phoneKey, 'Value' => $phoneValue]

    ]

]) {

    $output[] = [

        "Email" => $contactArray[array_search($id, array_column($contactArray, 'ID'))]['Email'],

        "ID" => $id,

        $firstnameKey => $firstnameValue,

        $cityKey => $cityValue,

        $nameKey => $nameValue,

        $phoneKey => $phoneValue

    ];

}


var_dump($output);

演示版


查看完整回答
反对 回复 2021-05-28
?
米脂

TA贡献1836条经验 获得超3个赞

您可以使用foreach做到这一点,


$result = [];

foreach ($contactDataArray as $key => $value) {

    $ids   = array_column($contactArray, "ID"); // fetching all values from contactArray

    if (!empty(array_intersect([$value['ContactID'], $value['ID']], $ids))) { // checking if both satisfy the condition

        $result[$key] = array_column($value['Data'], 'Value', 'Name'); // combining name and value

        // searchng for key with matched ContactID

        $result[$key]['Email'] = $contactArray[array_search($value["ContactID"], $ids)]['Email'];

        $result[$key]['ID'] = $value["ContactID"];

    }

}

演示


查看完整回答
反对 回复 2021-05-28
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

你可以试一下吗?


$output = [];

for($i = 0; $i < count($contactDataArray); $i++) {

    $arrIDandEmail = [

        'Email' => isset($contactArray[$i]['Email']) ? $contactArray[$i]['Email'] : '', 

        'ID' => isset($contactDataArray[$i]['ID']) ? $contactDataArray[$i]['ID'] : ''

    ];

    $arrData = array_column($contactDataArray[$i]["Data"], "Value", "Name");

    $newArray = array_merge($arrIDandEmail, $arrData);

    $output[] = $newArray;

}


查看完整回答
反对 回复 2021-05-28
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信