2017-01-16 6 views
3

, например, у меня есть массив:PHP матч массива в два dementional массива

$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 для поиска, но считал, что это слишком медленно, у меня есть около тысячи элементов в моем массиве, пожалуйста, помогите

ответ

7

array_intersect Использование:

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

Пробовал он работал как шарм! .. Good One –

+0

отличная мысль! Я попробовал, и все получилось! спасибо ~ –

+0

Но я думаю, что добавление array_values ​​может быть более подходящим: 'array_values ​​(array_intersect ($ type, $ objects));' –

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 
     ) 

)