【问题标题】:mapping associative array with another associative array将关联数组与另一个关联数组映射
【发布时间】:2015-11-25 09:08:55
【问题描述】:

我找到了解决问题的方法,但我想看看是否有更好或更清晰的解决方案。我有两个这样的关联数组:

$person= [
    "A" => [
            "sur" => "a",
            "fir" => "andras"
            ],
    "C" =>  [
            "sur" => "b",
            "fir" => "balint"
            ]
];
$data = [
    "A" => ["011", "012", "013"],
    "C" => ["021", "022"]
];

如果它们的键相等,我想映射这两个数组。所以结果应该是这样的:

$person= [
    "A" => [
            "sur" => "a",
            "fir" => "andras",
            "tel" => ["011", "012", "013"]
            ],
    "C" =>  [
            "sur" => "b",
            "fir" => "balint",
            "tel" => ["021", "022"]
            ]
];

我的代码:

foreach ( array_intersect_key(array_keys($data,$person)) as $id) {
    $person[$id]['tel'] = $data[$id];
}

【问题讨论】:

标签: php arrays dictionary associative-array


【解决方案1】:

我觉得你的方法很好。对于您的示例,我会这样做:

array_walk($person, function(&$v, $k) use ($data) {
    $v['tel'] = $data[$k];
});

仅仅因为当我回到几个月后的代码时,我可以很快看到我正在迭代和更改使用 array_walk 的数组 - 我认为这确实是个人喜好。

【讨论】:

    【解决方案2】:

    看起来你想循环两个具有相同索引的数组...... 所以试试这个

    foreach ($person as $key => $value) {   
        $person[$key]['tel'] = $data[$key];         
    }
    var_dump($person);
    

    【讨论】:

    • 我错过了一条信息。我只想在人和数据 $key 相互匹配的情况下进行映射。基本代码(硬编码)如下所示: foreach ($person as $pkey => $pvalue) { foreach ($data as $dkey => $dval) { if($dkey == $pkey) { $person [$pkey]["tel"] = $adat[$dkey]; } } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2020-07-23
    相关资源
    最近更新 更多