获取表

时间:2017-01-24 09:49:24

标签: php php-5.4 array-intersect

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

$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但不能正常工作。你能帮帮我吗?

4 个答案:

答案 0 :(得分:1)

只需使用循环:

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

答案 1 :(得分:1)

如果两个数组的值都可以转换为相同的类型,则array_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而另一个为空数组的情况下,它们可以被认为是相同的,但这不是很有用

答案 2 :(得分:0)

您是否尝试过使用array_intersect_uassochttp://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"));

答案 3 :(得分:0)

使用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);