在 php 中与另一个数组相交关联数组

Intersect associative array from another array in php

我有两个数组

$a = array( 
    array(
        'id' => 1,
        'name' => "Facebook" 
    ),
    array(
        'id' => 2,
        'name' => "Twitter" 
    ),
    array(
        'id' => 3,
        'name' => "Google" 
    ),
    array(
        'id' => 4,
        'name' => "Linkdin" 
    ),
    array(
        'id' => 5,
        'name' => "Github" 
    ),
);

另一个是,

$b = array(1, 3, 5);

根据$b数组的值,选择$a关联数组id作为结果。 所以结果将是,

$result = $a = array( 
    array(
        'id' => 1,
        'name' => "Facebook" 
    ),
    array(
        'id' => 3,
        'name' => "Google" 
    ),
    array(
        'id' => 5,
        'name' => "Github" 
    ),
);

简单的一行(通过 4 行可读性更强):

$result = array_filter(
    $a, 
    function($v) use ($b) { return in_array($v['id'], $b); }
);
foreach ($a as $key => $value) {
    if (in_array($value['id'], $b)) {
        $result[] = $value;
    }
}

计算交集的另一种方法:

$result = array_intersect_key(array_column($a, null, 'id'), array_flip($b));
  • 通过id
  • 重新索引$a
  • 翻转 $b 以获取值作为键
  • 计算键的交集