我有两个数组,我想使用第一个数组中的键来搜索第二个数组中匹配的键,并返回第二个阵列中的键具有值第二阵列的。
预期结果:大堆('中介机构/合同/{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。