【问题标题】:Removing arrays whose multidimensional elements don't appear in another array?删除多维元素未出现在另一个数组中的数组?
【发布时间】:2011-03-17 19:10:02
【问题描述】:

我有一个名为$item_list的多维数组:

Array
(
    [0] => Array
        (
            [id] => 12
            [customer] => Joe Bloggs
            [details] => Text
        )

    [1] => Array
        (
            [id] => 13
            [customer] => Fred Smith
            [details] => Text
        )

    [2] => Array
        (
            [id] => 14
            [customer] => John Doe
            [details] => Text
        )
)

我有另一个来自不同数据库(因此没有 SQL 解决方案)的数组,名为 $id_list,其中包含我想要保留$item_list ID:

Array
(
    [0] => 12
    [1] => 14
)

有没有一种方法可以通过将$item_list[1]['id']$id_list 中的元素进行比较来删除$item_list[1],而无需使用foreach() 或类似方法手动迭代$item_list 数组?

【问题讨论】:

    标签: php arrays comparison multidimensional-array


    【解决方案1】:
    $keep = array(12, 14);
    
    $data = array_filter($data, function ($a) use ($keep)
    {
      return in_array($a['id'], $keep);
    });
    

    请注意,您可以先array_flip $keep,然后使用isset() 获得更优化的解决方案。

    【讨论】:

    • 我还是不明白array_filter(),但是你的解决方案非常有效,非常感谢:)
    • @Kalessin, array_filter 简单地遍历传递的数组,为每个元素调用指定的函数。如果该函数调用为该元素返回true,则它包含在返回的列表中。为简洁起见,我使用匿名函数,但您可以使用独立函数并按名称引用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多