我有两个数组,只有一个索引列出了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有其他数据。我需要保留该数据并仅返回与第一个数组不匹配的行。帮助非常受欢迎。
答案 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
的术语。
我不知道这是否比其他解决方案更好或更差;这只是另一种看待它的方式。