将一个数组值与另一个匹配,并检索/替换匹配的值


Matching one array value to another and retrieving/replacing matched

我正试图通过使用$arrayA:中的键"locationid"来检索$arrayB中的"location"

$arrayA=Array
(
    (0) => Array
        (
            (domain) => 'testing.com',
            (locationid) => '7',
            (description) => 'Lorem'
        ),
    (1) => Array
        (
            (domain) => 'testing2.com',
            (locationid) => '6',
            (description) => 'Ipsum'
        ),
    (2) => Array
        (
            (domain) => 'testing3.com',
            (locationid) => '1',
            (description) => 'Foo'
        )
);
$arrayB=Array
(
    (0) => Array
        (
            (locationid) => '1',
            (location) => 'London'
        ),
    (1) => Array
        (
            (locationid) => '6',
            (location) => 'New York'
        ),
    (2) => Array
        (
            (locationid) => '7',
            (location) => 'Tokyo'
        )
);

然后最终得到$arrayC,这将是一个类似于的东西

$arrayC=Array
(
    (0) => Array
        (
            (domain) => 'testing.com',
            (location) => 'Tokyo',
            (description) => 'Lorem'
        ),
        etc...
);

对此,最好的方法是什么?我想是某种"foreach"函数,但我无法理解它!

非常感谢

一个嵌套循环就可以了,但我认为这是更可读的

<?php
$arrayA=Array
(
    '0' => Array
        (
            'domain' => 'testing.com',
            'locationid' => '7',
            'description' => 'Lorem'
        ),
    '1' => Array
        (
            'domain' => 'testing2.com',
            'locationid' => '6',
            'description' => 'Ipsum'
        ),
    '2' => Array
        (
            'domain' => 'testing3.com',
            'locationid' => '1',
            'description' => 'Foo'
        )
);
$arrayB=Array
(
    '0' => Array
        (
            'locationid' => '1',
            'location' => 'London'
        ),
    '1' => Array
        (
            'locationid' => '6',
            'location' => 'New York'
        )
);
function getDomain($id, $list) {
  foreach ($list as $domain) {
    if ($domain['locationid'] == $id) {
      return $domain;
    }
  }
}
$arrayC = array();
foreach ($arrayB as $id) {
  $newData = getDomain($id['locationid'], $arrayA);
  $newData['location'] = $id['location'];
  $arrayC[] = $newData;
}
var_dump($arrayC);
$arrayB = array( 7 => 'Tokyo' );
$arrayC = array_map( function(&$a) use ($arrayB) {
    $a['location'] = $arrayB[$a['locationid']];
    unset([$a['locationid']);
    return $a; 
}, $arrayA);

也许就是这样。

$arrayA = array(
array('domain' => 'testing.com', 'locationid' => '7', 'description' => 'Lorem'),
array('domain' => 'testing2.com', 'locationid' => '6', 'description' => 'Ipsum'),
array('domain' => 'testing3.com', 'locationid' => '1', 'description' => 'Foo')
);
$arrayB = array(
array('locationid' => '1', 'location' => 'London'),
array('locationid' => '6', 'location' => 'New York'),
array('locationid' => '7', 'location' => 'Tokyo')
);
$arrayA_a = array();
foreach($arrayA AS $arrayA_b)
{
    $arrayA_a["$arrayA_b[locationid]"] = $arrayA_b;
}
$arrayB_a = array();
foreach($arrayB AS $arrayB_b)
{
    $arrayB_a["$arrayB_b[locationid]"] = $arrayB_b;
}
$arrayC = array();
foreach($arrayA_a AS $arrayA_a_key => $arrayA_a_value)
{
    $arrayC["$arrayA_a_key"]['domain']      = $arrayA_a_value['domain'];
    $arrayC["$arrayA_a_key"]['description'] = $arrayA_a_value['description'];
    $arrayC["$arrayA_a_key"]['location']    = $arrayB_a["$arrayA_a_key"]['location'];
}
print_r($arrayC);
Array
(
[7] => Array
    (
        [domain] => testing.com
        [description] => Lorem
        [location] => Tokyo
    )
[6] => Array
    (
        [domain] => testing2.com
        [description] => Ipsum
        [location] => New York
    )
[1] => Array
    (
        [domain] => testing3.com
        [description] => Foo
        [location] => London
    )
)

如果您想重置$arrayC:的密钥

$arrayC = array_merge($arrayC);
Array
(
[0] => Array
    (
        [domain] => testing.com
        [description] => Lorem
        [location] => Tokyo
    )
[1] => Array
    (
        [domain] => testing2.com
        [description] => Ipsum
        [location] => New York
    )
[2] => Array
    (
        [domain] => testing3.com
        [description] => Foo
        [location] => London
    )
)