如何将键从一个数组匹配到另一个数组,并从另一个返回键



我有两个数组,我想使用第一个数组中的键来搜索第二个数组中匹配的键,并返回第二个阵列中的键具有值​​第二阵列的。

预期结果:大堆('中介机构/合同/{contract:id}/银行账户'[2]'经理/action/{action:id}/银行票据'[2])

$arrayOne = [ 
'/Intermediary/contract//bank-accounts'[2]
'/Manager/action//bank-bills'[2]]
$arrayTwo = [
'/Intermediary/contract/{contract:id}/bank-accounts',
'/Manager/action/{action:id}/bank-bills',
]

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

foreach ($array1 as $key => $value) {
$results = preg_grep('/$key/', $array2);
}

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

首先从$arrayTwo中去掉所有的{.....},并计算与$arrayOne的交集(相同条目(。由于密钥保留在已替换的数组中,因此可以计算密钥与$arrayTwo:的交集

$result = array_intersect_key(
array_intersect(preg_replace('/{[^}]+}/', '', $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;
}
}

无论出于何种原因,如果您再次需要它们作为关键点,则有array_flicp。

相关内容

最新更新