在一个二维数组中匹配PHP数组

3
例如,我有一个数组:

$objects = ['car', 'cat', 'dog', 'Peter'];

另外一个:

$types = [
    'man' => ['Peter', 'John','...'],
    'animal' => ['pig', 'cat', 'dog', '...'],
    'vehicle' => ['bus', 'car', '...']
];

我的目标是获取一个类似于以下的数组:
$result = [
    'man' => ['Peter'],
    'animal' => ['cat', 'dog'],
    'vehicle' => ['car']
]

最有效的在数组中搜索的方法是什么?在我的工作中,我使用了两个foreach循环进行搜索,但发现速度太慢了,我的数组中有大约数千个元素。

2个回答

7
使用array_intersect
foreach ($types as $key => $type) {
  $result[$key] = array_intersect($type, $objects);
}

但我认为添加一个array_values可能更适合:array_values(array_intersect($type, $objects)); - Jin Aazoe

0
$objects = ['car', 'cat', 'dog', 'Peter'];

$types = [
    'man' => ['Peter', 'John'],
    'animal' => ['pig', 'cat', 'dog'],
    'vehicle' => ['bus', 'car']
];

foreach ($types as $key => $type) {
  $result[$key] = array_intersect($type, $objects);
}

echo '<pre>';
print_r($result);





Array
(
    [man] => Array
        (
            [0] => Peter
        )

    [animal] => Array
        (
            [1] => cat
            [2] => dog
        )

    [vehicle] => Array
        (
            [1] => car
        )

)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接