【问题标题】:How to remove a array from an array by comparing it with another array?如何通过将数组与另一个数组进行比较来从数组中删除数组?
【发布时间】:2020-07-30 18:15:27
【问题描述】:

我有 2 个数组,如下所示。一个数组是二维数组($array_1),另一个是简单数组($array_2)。这个 $array_1 作为每个数组中称为 private_name 的键,$array_2 有一个 private_key 值列表。我想保留与$array_2 匹配的$array_1 的数组。

    $array_1 = [
        [0] => ['id'=>12, 'private_name' => 'name12', 'age' => '23'],
        [1] => ['id'=>2, 'private_name' => 'name2', 'age' => '23'],
        [2] => ['id'=>9, 'private_name' => 'name1', 'age' => '23'],
        [3] => ['id'=>11, 'private_name' => 'name11', 'age' => '23'],
        .
        .
        .
        [999] => ['id'=>999, 'private_name' => 'name999', 'age' => '23'],
   ];

   $array_2 = ['name1', 'name2', 'name3',....];

所以我想从$array_1 中删除与$array_2 匹配的数组内容。目前正在使用以下方法,但由于$array_1 中有 14k+ 数组值,因此需要很长时间。是否有任何解决方案仅使用 1 行来解决上述问题。我想要一个像

这样的解决方案
$newVal = array_intersect(array_column($array_1, 'private_name'), $array_2);

目前正在做下面的事情,这需要很多时间

$results = array();
    $count = 0;
    if (count($array_1) > 0) {
        foreach ($array_1 as $row) {
            foreach ($row as $col => $val) {
                foreach ($array_2 as $key3 => $pvt_name) {

                    if (strcmp($row['private_name'], $array_1) == 0) {

                        $results[$count][$col] = $val;

                    }
                }
            }
            $count++;
        }
    }

非常感谢任何帮助。谢谢

【问题讨论】:

    标签: php arrays laravel-5 multidimensional-array foreach


    【解决方案1】:

    这可以使用array_filter 轻松完成。

    $filtered_array = array_filter($array_1, function($item) use($array_2) {
      return !in_array($item['private_name'], $array_2);
    });
    var_dump($filtered_array);
    

    回调函数需要返回 true 以保留结果中的项目,返回 false 以丢弃它。这是通过检查项目的private_name 值是否包含在您的第二个数组中来完成的 - 以及否定的结果,因为您只想保留那些匹配的。

    【讨论】:

    • 感谢您的解决方案。小变化..我想保留 $array_2 中可用的数据。我已经改变了它。所以我删除了这个否定但问题是它需要很多时间来处理。我在 $array_1 中有大约 14k+ 数组。任何解决方案。目前执行该行大约需要 30-40 秒
    • 好吧,您可以通过自己显式循环数据来尝试相同的操作(one 循环遍历数组 1 的外层,检查 in_array,然后将项目插入如果你得到一个匹配结果数组),然后比较性能或做一些实际的基准测试......但这可能不会改变太多关于这么多数据需要多长时间。
    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多