获取表格的交集

Get the intersect of tables

我有一个问题。所以我有这个数组:

$a_list_id = array(
   0 => 1234
   1 => 739
   3 => 538
);

这个数组:

$a_users = array(
    0 => array(
        id => 15627,
        name => test
    ),
    1 => array(
        id => 1234,
        name => test1
    ),
    2 => array(
        id => 739,
        name => test2
    )
)

结果应该是:

$a_response = array(
    0 => array(
       id => 1234,
       name => test1 
    )
)

因为id 1234在两个数组中。 我尝试使用 array_intersect 但没有用。你能帮帮我吗?

只需使用循环:

$a_response = array();
foreach ($a_users as $array) {
    if (in_array($array['id'], $a_list_id)) {
        $a_response []= $a_users;
    }
}

您尝试过使用 array_intersect_uassoc 吗? http://php.net/manual/en/function.array-intersect-uassoc.php

function compare_ids($a, $b)
{
    return $a - $b['id'];
}

print_r(array_intersect_uassoc($a_list_id, $a_users, "compare_ids"));

使用 array_search() 函数尝试以下代码:

$a_list_id = array(1234, 538,739);

$a_users = array(
 array(
    'id'=> 15627,
    'name' => 'test'
),
 array(
    'id' => 1234,
    'name' => 'test1'
),
 array(
    'id' => 739,
    'name' => 'test2'
)
);

foreach($a_users as $a_user){
  if (in_array($a_user['id'], $a_list_id)) {
     $a_response[array_search($a_user['id'], $a_list_id)] = $a_user;
  }
}

print_r($a_response);

array_intersect 只有在两个数组的值都可以转换为同一类型时才会产生有用的结果。你有一个整数数组和另一个数组数组,它​​们永远不会*匹配,所以 intersect 永远是空的

如果你想要数组之间的交集,那么你有两个选择:

  • 索引数组,使它们的键是您要相交的值并使用 array_intersect_key
  • 使用 array_uintersect 和知道被比较数组结构的回调函数实现您自己的数组比较逻辑

前者的例子:

$a_list_id = array(
   1234 => 1234
   739 => 739
   538 => 538
);

$a_users = array(
    15627 => array(
        id => 15627,
        name => test
    ),
    1234 => array(
        id => 1234,
        name => test1
    ),
    739 => array(
        id => 739,
        name => test2
    )
)

var_dump (array_intersect_key ($a_users, $a_list_id));

后者的例子:

var_dump (array_uintersect ($a_users, $a_list_id, function ($user, $id) {
    return $user ["id"] - $id; // Result should be 0 if they match, as per documentation
}))

*在一个值为整数0,另一个为空数组的情况下可以认为它们是一样的,但这不是很有用