If array exists in array - 多维关联数组
If array exists in array - multidimensional associative array
我有两个多维数组。我想检查数组 1 中的每个项目,看看它是否在数组 2 中,反之亦然。
例如:
$arr1 = [
[
id => '1',
order => '123238'
],
[
id => '2',
order => '33278'
],
[
id => '3',
order => '8892372'
]
];
$arr2 = [
[
id => '1',
order => '349483'
],
[
id => '2',
order => '9837283'
],
[
id => '3',
order => '33278'
]
];
我想通过 order
查看。
所以像这样:
if($arr1['order'] does not exist in $arr2['order']) {
echo 'abc';
}
if($arr2['order'] does not exist in $arr1['order']) {
echo 'xyz';
}
我考虑过对两者进行 foreach
循环,但它不会让我知道 arr
# 它从中丢失了。
我怎样才能做到这一点?
您可以使用 array_uintersect
or array_udiff
根据 order
键的值查找每个数组中相同或不同的值:
// values in both $arr1 and $arr2
print_r(array_uintersect($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
// values in $arr1 but not $arr2
print_r(array_udiff($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
// values in $arr2 but not $arr1
print_r(array_udiff($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
输出:
Array
(
[1] => Array
(
[id] => 2
[order] => 33278
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
尝试这样的事情:
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if (!in_array($arr1[$i]['order'], $arr2[$j])) {
echo "abc ";
}
}
}
它主要检查 arr1
中的每个 order
是否已经存在于 $arr2
中,如果不存在,您将得到一个 abc
作为输出。
因此你会得到这个作为输出:
abc abc abc abc abc abc abc abc abc
这里还有一个带有 foreach
:
的版本
foreach ($arr1 as $arrone){
foreach ($arr2 as $arrtwo) {
if (!in_array($arrone['order'], $arrtwo)) {
echo "abc ";
}
}
}
您可以使用 array_column
和 array_intersect_key
这样的方法
$arr1 = array_column($arr1, null , 'order');
$arr2 = array_column($arr2, null , 'order');
print_r(array_intersect_key($arr1,$arr2));
您可以使用 array_uintersect 和自定义回调函数来检查值或 order
来获取所有交叉点。
$intersect = array_uintersect($arr1, $arr2, function ($a, $b) {
return strcmp($a['order'], $b['order']);
});
print_r($intersect);
$notInArr1 = array_uintersect($arr1, $arr2, function ($a, $b) {
if ($a["order"] === $b["order"]) return -1;
if ($a["order"] > $b["order"]) return 1;
return 0;
});
print_r($notInArr1);
$notInArr2 = array_uintersect($arr2, $arr1, function ($a, $b) {
if ($a["order"] === $b["order"]) return -1;
if ($a["order"] > $b["order"]) return 1;
return 0;
});
print_r($notInArr2);
输出
Array
(
[1] => Array
(
[id] => 2
[order] => 33278
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 349483
)
[1] => Array
(
[id] => 2
[order] => 9837283
)
)
忽略您的 ID,从您的第二个数组构建一个订单号列表,然后遍历您的初始数组以检查订单号是否不包含在:
数据:
$arr1 = [
[
id => '1',
order => '123238'
],
[
id => '2',
order => '33278'
],
[
id => '3',
order => '8892372'
]
];
$arr2 = [
[
id => '1',
order => '349483'
],
[
id => '2',
order => '9837283'
],
[
id => '3',
order => '33278'
]
];
方法:
foreach($arr2 as $item)
$orders2[] = $item['order'];
foreach($arr1 as $item)
if(!in_array($item['order'], $orders2))
echo $item['order'], " order number is not contained\n";
输出:
123238 order number is not contained
8892372 order number is not contained
我有两个多维数组。我想检查数组 1 中的每个项目,看看它是否在数组 2 中,反之亦然。
例如:
$arr1 = [
[
id => '1',
order => '123238'
],
[
id => '2',
order => '33278'
],
[
id => '3',
order => '8892372'
]
];
$arr2 = [
[
id => '1',
order => '349483'
],
[
id => '2',
order => '9837283'
],
[
id => '3',
order => '33278'
]
];
我想通过 order
查看。
所以像这样:
if($arr1['order'] does not exist in $arr2['order']) {
echo 'abc';
}
if($arr2['order'] does not exist in $arr1['order']) {
echo 'xyz';
}
我考虑过对两者进行 foreach
循环,但它不会让我知道 arr
# 它从中丢失了。
我怎样才能做到这一点?
您可以使用 array_uintersect
or array_udiff
根据 order
键的值查找每个数组中相同或不同的值:
// values in both $arr1 and $arr2
print_r(array_uintersect($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
// values in $arr1 but not $arr2
print_r(array_udiff($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
// values in $arr2 but not $arr1
print_r(array_udiff($arr1, $arr2, function ($a, $b) { return $a['order'] - $b['order']; }));
输出:
Array
(
[1] => Array
(
[id] => 2
[order] => 33278
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
尝试这样的事情:
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if (!in_array($arr1[$i]['order'], $arr2[$j])) {
echo "abc ";
}
}
}
它主要检查 arr1
中的每个 order
是否已经存在于 $arr2
中,如果不存在,您将得到一个 abc
作为输出。
因此你会得到这个作为输出:
abc abc abc abc abc abc abc abc abc
这里还有一个带有 foreach
:
foreach ($arr1 as $arrone){
foreach ($arr2 as $arrtwo) {
if (!in_array($arrone['order'], $arrtwo)) {
echo "abc ";
}
}
}
您可以使用 array_column
和 array_intersect_key
$arr1 = array_column($arr1, null , 'order');
$arr2 = array_column($arr2, null , 'order');
print_r(array_intersect_key($arr1,$arr2));
您可以使用 array_uintersect 和自定义回调函数来检查值或 order
来获取所有交叉点。
$intersect = array_uintersect($arr1, $arr2, function ($a, $b) {
return strcmp($a['order'], $b['order']);
});
print_r($intersect);
$notInArr1 = array_uintersect($arr1, $arr2, function ($a, $b) {
if ($a["order"] === $b["order"]) return -1;
if ($a["order"] > $b["order"]) return 1;
return 0;
});
print_r($notInArr1);
$notInArr2 = array_uintersect($arr2, $arr1, function ($a, $b) {
if ($a["order"] === $b["order"]) return -1;
if ($a["order"] > $b["order"]) return 1;
return 0;
});
print_r($notInArr2);
输出
Array
(
[1] => Array
(
[id] => 2
[order] => 33278
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 123238
)
[2] => Array
(
[id] => 3
[order] => 8892372
)
)
Array
(
[0] => Array
(
[id] => 1
[order] => 349483
)
[1] => Array
(
[id] => 2
[order] => 9837283
)
)
忽略您的 ID,从您的第二个数组构建一个订单号列表,然后遍历您的初始数组以检查订单号是否不包含在:
数据:
$arr1 = [
[
id => '1',
order => '123238'
],
[
id => '2',
order => '33278'
],
[
id => '3',
order => '8892372'
]
];
$arr2 = [
[
id => '1',
order => '349483'
],
[
id => '2',
order => '9837283'
],
[
id => '3',
order => '33278'
]
];
方法:
foreach($arr2 as $item)
$orders2[] = $item['order'];
foreach($arr1 as $item)
if(!in_array($item['order'], $orders2))
echo $item['order'], " order number is not contained\n";
输出:
123238 order number is not contained
8892372 order number is not contained