Php 仅比较两个数组的第一个索引

Php 仅比较两个数组的第一个索引,php,arrays,Php,Arrays,我有两个数组,一个只有一个索引,列表id是。另一个数组有许多索引,但我只想比较两个数组的id索引,即索引[0]。我只想得到id不匹配的行,然后返回这些行。例如: $array1 = [ '12345', '23457' ]; $array2 = [ [id => '12345', 'fake_data' => 'something'], [id => '23457', 'more_data' => 'something else'],

我有两个数组,一个只有一个索引,列表id是。另一个数组有许多索引,但我只想比较两个数组的id索引,即索引[0]。我只想得到id不匹配的行,然后返回这些行。例如:

$array1 = [
    '12345',
    '23457'
];

$array2 = [
   [id => '12345', 'fake_data' => 'something'],
   [id => '23457', 'more_data' => 'something else'],
   [id => '76389','more_data' => 'something else 3'],
   [id => '10293', 'more_data' => 'something else 4'],
   [id => '09229', 'more_data' => 'something else 5']
];
第一个数组只有一个id,另一个数组有一个id来放置其他数据。我需要保留这些数据,只返回与第一个数组不匹配的行。非常感谢你的帮助

$array1 = [
    '12345',
    '23457'
];

$array2 = [
   ['id' => '12345', 'fake_data' => 'something'],
   ['id' => '23457', 'more_data' => 'something else'],
   ['id' => '76389','more_data' => 'something else 3'],
   ['id' => '10293', 'more_data' => 'something else 4'],
   ['id' => '09229', 'more_data' => 'something else 5']
];

$found_id_rows = array_filter($array2, function($row) use($array1) {
    return in_array($row['id'], $array1);
});

$not_found_id_rows = array_filter($array2, function($row) use($array1) {
    return !in_array($row['id'], $array1);
});
给出:

Array
(
    [0] => Array
        (
            [id] => 12345
            [fake_data] => something
        )

    [1] => Array
        (
            [id] => 23457
            [more_data] => something else
        )

)
Array
(
    [2] => Array
        (
            [id] => 76389
            [more_data] => something else 3
        )

    [3] => Array
        (
            [id] => 10293
            [more_data] => something else 4
        )

    [4] => Array
        (
            [id] => 09229
            [more_data] => something else 5
        )

)

给出:

Array
(
    [0] => Array
        (
            [id] => 12345
            [fake_data] => something
        )

    [1] => Array
        (
            [id] => 23457
            [more_data] => something else
        )

)
Array
(
    [2] => Array
        (
            [id] => 76389
            [more_data] => something else 3
        )

    [3] => Array
        (
            [id] => 10293
            [more_data] => something else 4
        )

    [4] => Array
        (
            [id] => 09229
            [more_data] => something else 5
        )

)

我认为它看起来像是一个由两种不同类型的数组组成的
数组。要处理不同的数组类型,可以使用,它使用回调来定义项之间的比较

$result = array_uintersect($array2, $array1, function($a, $b) {
    return ($a['id'] ?? $a) <=> ($b['id'] ?? $b);
});
$result=array\u uintersect($array2,$array1,function($a,$b){
报税表($a['id']??$a)($b['id']??$b);
});
回调中的两个术语
($a['id']?$a)
($b['id']?$b)
)是这样的,因为它们可以是
$array1
$array2
中的术语


我不知道这比其他解决方案好还是坏;这只是另一种看待它的方式。

我认为它看起来像是一个包含两种不同类型数组的
数组。要处理不同的数组类型,可以使用,它使用回调来定义项之间的比较

$result = array_uintersect($array2, $array1, function($a, $b) {
    return ($a['id'] ?? $a) <=> ($b['id'] ?? $b);
});
$result=array\u uintersect($array2,$array1,function($a,$b){
报税表($a['id']??$a)($b['id']??$b);
});
回调中的两个术语
($a['id']?$a)
($b['id']?$b)
)是这样的,因为它们可以是
$array1
$array2
中的术语


我不知道这比其他解决方案好还是坏;这只是另一种看待问题的方式。

我希望我能投票支持你们两个,但我不能,所以我必须投票支持第一个答案。这三种方法我都没有用,所以都起作用了。谢谢你们的意见。我希望我能投票支持你们两个,但我不能,所以我必须投票支持第一个答案。这三种方法我都没有用,所以都起作用了。感谢您的输入。在Jarad的回答中,您可以将条件替换为:
if(在数组中($array['id',$array1))
。如果你不想变异第二个数组,首先复制它。正如Jarad的回答一样,你可以将条件替换为:
If(在数组中($array['id',$array1))
。如果不想变异第二个数组,请先复制它。