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

时间:2017-12-08 21:05:27

标签: php arrays

我有两个数组,只有一个索引列出了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有其他数据。我需要保留该数据并仅返回与第一个数组不匹配的行。帮助非常受欢迎。

3 个答案:

答案 0 :(得分:2)

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
        )

)

给出:

{{1}}

<强> https://3v4l.org/6OVjP

答案 1 :(得分:1)

<?php

$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']
];

foreach($array2 as $key => $array)
    if(array_search($array['id'], $array1) !== false)
        unset($array2[$key]);

var_export($array2);

输出:

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',
    ),
  )

答案 2 :(得分:0)

我认为它看起来像array_intersect,有两种不同类型的数组。要处理不同的数组类型,可以使用array_uintersect,它接受​​回调来定义项之间的比较。

$result = array_uintersect($array2, $array1, function($a, $b) {
    return ($a['id'] ?? $a) <=> ($b['id'] ?? $b);
});

回调中的两个术语($a['id'] ?? $a)($b['id'] ?? $b)就是这样,因为它们可以是来自$array1$array2的术语。

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