我应该使用哪个PHP数组函数?

我应该使用哪个PHP数组函数?,php,multidimensional-array,Php,Multidimensional Array,我有两个阵列: Array ( [0] => Array ( [id] => 1 [type] => field [remote_name] => Title [my_name] => title [default_value] => http%3A%2F%2Ftest.com ) [1] => Array ( [id] =>

我有两个阵列:

Array
(
[0] => Array
    (
        [id] => 1
        [type] => field
        [remote_name] => Title
        [my_name] => title
        [default_value] => http%3A%2F%2Ftest.com
    )

[1] => Array
    (
        [id] => 2
        [type] => field
        [remote_name] => BookType
        [my_name] => book-type
        [default_value] => 
    )

[2] => Array
    (
        [id] => 3
        [type] => value
        [remote_name] => dvd-disc
        [my_name] => dvd
        [default_value] => 
    )
)


Array
(
[title] => Test
[book-type] => dvd
)
我需要获取第二个数组中的每个键,将其与第一个数组中的
my\u name
值匹配,并将其替换为第一个数组中相应的
remote\u name
值,同时保留第二个数组的值

必须有一些c
array
zy函数来帮助您

编辑:在少数情况下,第二个数组的
值将需要替换为第一个数组的
远程\u名称的
值,其中第二个数组的值与第一个数组的
我的\u名称的值匹配。我怎样才能做到这一点

例如:
BookType=>dvd
应该变成
BookType=>dvd-disc
像这样吗

foreach($arr1 as &$el) {
    $el['remote_name'] = $arr2[$el['my_name']];
}
unset($el);
$first = array(
    array(
        'id' => 1,
        'type' => 'field',
        'remote_name' => 'Title',
        'my_name' => 'title',
        'default_value' => 'http%3A%2F%2Ftest.com',
    ),
    array(
        'id' => 2,
        'type' => 'field',
        'remote_name' => 'BookType',
        'my_name' => 'book-type',
        'default_value' => '',
    ),
    array(
        'id' => 3,
        'type' => 'value',
        'remote_name' => 'dvd-disc',
        'my_name' => 'dvd',
        'default_value' => '',
    ),
);

$second = array(
    'title' => 'Test',
    'book-type' => 'dvd',
);

$map = array('fields' => array(), 'values' => array());
foreach ($first as $entry) {
    switch ($entry['type']) {
        case 'field':
            $map['fields'][$entry['my_name']] = $entry['remote_name'];
            break;

        case 'value':
            $map['values'][$entry['my_name']] = $entry['remote_name'];
            break;
    }
}

$new = array();
foreach ($second as $key => $val) {
    $new[isset($map['fields'][$key]) ? $map['fields'][$key] : $key] = isset($map['values'][$val]) ? $map['values'][$val] : $val;
}

print_r($new);
输出

Array
(
    [Title] => Test
    [BookType] => dvd-disc
)
说明

Array
(
    [Title] => Test
    [BookType] => dvd-disc
)
第一个循环收集字段和值的my_name/remote_name对,使它们更易于访问。 像这样:

第二个循环将遍历
$second
,并使用其中的键/值对填充
$new
。但在执行此操作时,将检查
$map
中是否存在重复的键/值


在映射中找不到的键或值将按原样使用。

我不知道有这样的c
array
zy函数,但我知道如何实现:

//$array1 is first array, $array2 is second array

foreach($array1 as $key => $value){
    if (isset($value['remote_name'], $value['my_name']) && $value['remote_name'] && $value['my_name']){
        $my_name = $value['my_name'];
        if (isset($array2[$my_name])) {
            $remote_name = $value['remote_name'];
            $array2[$remote_name] = $array2[$my_name];
            //cleanup
            unset($array2[$my_name]);
        }
    }
}

+1因为你太他妈的p(h)了,你怎么能在保留第二个数组的值的同时替换第二个数组中的值呢?抽象溢出。为了澄清-我想基本上用第一个数组的
remote\u name
值替换第二个数组的键,该值包含第二个数组的键作为第一个数组的
my\u name
值………..澄清。伤害了我的大脑,但看起来很好。如何将其添加到新的结果数组而不是修改第二个数组?@Dave Kiss查看更新的示例。没有太大变化,只是使用
$new
作为数据容器。实际上,你还在吗?我还有一个循环要投进去question@DaveKiss假设
[type]=>值
条目应覆盖值和
[type]=>字段
条目是正确的吗,关键点?Yoshi您的假设得到确认