Php 如何将一个数组中的键匹配到另一个数组中,以及如何从另一个数组返回键

Php 如何将一个数组中的键匹配到另一个数组中,以及如何从另一个数组返回键,php,arrays,preg-match,Php,Arrays,Preg Match,我有2个数组,我想使用第一个数组中的键从第二个数组中搜索匹配的键,并从第二个数组中返回这些键 价值观​​第二个数组的 预期结果: 大堆 '中间人/合同/{contract:id}/银行账户'[2] 'Manager/action/{action:id}/bank bills'[2] 到目前为止,我已经试过了 foreach ($array1 as $key => $value) { $results = preg_grep('/$key/', $array2); }

我有2个数组,我想使用第一个数组中的键从第二个数组中搜索匹配的键,并从第二个数组中返回这些键 价值观​​第二个数组的

预期结果: 大堆 '中间人/合同/{contract:id}/银行账户'[2] 'Manager/action/{action:id}/bank bills'[2]

到目前为止,我已经试过了

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

    $results = preg_grep('/$key/', $array2);
    }

这些是值,而不是示例数组中的键

首先从$arrayTwo中去掉所有的{….},然后用$arrayOne计算相同的项目的交集。由于键保留在已替换的数组中,因此可以使用$arrayTwo计算键的交集:

这是一个例子

如果您确实需要这些键,那么答案会略有不同,将这些键作为一个数组:

$result = array_intersect_key(
    array_keys($arrayTwo),
    array_intersect(preg_replace('/\{[^}]+\}/', '', array_keys($arrayTwo)),
                                                    array_keys($arrayOne))
);
这是一个例子

要使用循环执行此操作,请执行以下操作:

foreach($arrayTwo as $k => $v) {
    if(in_array(preg_replace('/\{[^}]+\}/', '', $k), array_keys($arrayOne))) {
        $result[] = $k;
    }
}

如果出于任何原因再次需要它们作为键,则有。

请显示到目前为止您已尝试的内容。请参阅函数。这些不是键。我简化了示例,这些键有值,但我省略了它们。我想得到:'/intermediate/contract/{contract:id}/bank accounts','/Manager/action/{action:id}/bank bills',我编辑过,但在将来,将键更改为值并省略键并不会简化。我希望第一个表中的键替换为第二个表中匹配的键,而值​​在第一个表中保持不变。输出:$result['/intermediate/contract/{contract:id}/bank accounts'[2]'/Manager/action/{action:id}/bank bills'[2]]
$result = array_intersect_key(
    array_keys($arrayTwo),
    array_intersect(preg_replace('/\{[^}]+\}/', '', array_keys($arrayTwo)),
                                                    array_keys($arrayOne))
);
foreach($arrayTwo as $k => $v) {
    if(in_array(preg_replace('/\{[^}]+\}/', '', $k), array_keys($arrayOne))) {
        $result[] = $k;
    }
}