用另一个数组过滤多维php数组

问题描述 投票:0回答:2

我有一个数组

$result
,如下所示:

[0] => Array (
  [0] => Array (
    [itemid] => 1
    [name] => A
  )
  [1] => Array (
    [itemid] => 2
    [name] => B
  )
)
[1] => Array (
  [0] => Array (
    [itemid] => 3
    [name] => C
  )
  [1] => Array (
    [itemid] => 2
    [name] => B
  )
)

和一个数组

$items
,如下所示:

[0] => Array (
  [itemid] => 2
  [name] => B
)
[1] => Array (
  [itemid] => 4
  [name] => D
) 

如何从

$result
数组中删除
$items
数组中出现的所有项目?在这种情况下,
$result
将变为:

[0] => Array (
  [0] => Array (
    [itemid] => 1
    [name] => A
  )
)
[1] => Array (
  [0] => Array (
    [itemid] => 3
    [name] => C
  )
)

由于问题主要是代码,因此这里有一些额外的字符以使 StackOverflow 接受问题。

php arrays multidimensional-array
2个回答
1
投票

我想这就是你想要的。 (尚未测试)

<?php
foreach ($result as $key => $array) {
    $result[$key] = array_diff($array, $items);
}

print_r($result);

0
投票

循环 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',
    ),
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.