我有一个 3d 数组
$result
:
[
[
['itemid' => 1, 'name' => 'A'],
['itemid' => 2, 'name' => 'B'],
],
[
['itemid' => 3, 'name' => 'C'],
['itemid' => 4, 'name' => 'D'],
],
]
和一个二维数组
$items
:
[
['itemid' => 2, 'name' => 'B'],
['itemid' => 4, 'name' => 'D'],
]
如何从
$result
数组中的每个集合中删除 $items
数组中出现的行?在这种情况下,$result
将变为:
[
[
['itemid' => 1, 'name' => 'A'],
],
[
['itemid' => 3, 'name' => 'C'],
],
]
由于问题主要是代码,因此这里有一些额外的字符以使 StackOverflow 接受问题。
我想这就是你想要的。 (尚未测试)
<?php
foreach ($result as $key => $array) {
$result[$key] = array_diff($array, $items);
}
print_r($result);
循环 3D 输入数组中的数据集,并利用白名单对每组数据进行
array_udiff()
的过滤调用。
代码:(演示)
$array = [
[
['itemid' => 1, 'name' => 'A'],
['itemid' => 2, 'name' => 'B'],
],
[
['itemid' => 3, 'name' => 'C'],
['itemid' => 4, 'name' => 'D'],
],
];
$whitelist = [
['itemid' => 2, 'name' => 'B'],
['itemid' => 4, 'name' => 'D'],
];
var_export(
array_map(
fn($set) => array_udiff(
$set,
$whitelist,
fn($a, $b) => $a <=> $b
),
$array
)
);
输出:
array (
0 =>
array (
0 =>
array (
'itemid' => 1,
'name' => 'A',
),
),
1 =>
array (
0 =>
array (
'itemid' => 3,
'name' => 'C',
),
),
)