【问题标题】:How about subtraction two arrays in PHP如何在 PHP 中减去两个数组
【发布时间】:2021-01-01 07:06:25
【问题描述】:

我有 2 个这样的数组

   array1= [
          {
            "SKPD_ID": "40606000",
            "SKPD_SUB1_ID": "40606000-000000760-000000"
          },
          {
            "SKPD_ID": "40606000",
            "SKPD_SUB1_ID": "40606000-000000760-000000"
          },
          {
            "SKPD_ID": "40606000",
            "SKPD_SUB1_ID": "40606000-000000760-100000"
          }
        ]

$array2 = [
  {
    "SKPD_ID": "40606000",
    "SKPD_SUB1_ID": "40606000-000000760-000000"
  }
]

如果array2中有相同的值,我想删除array1中的值 所以我想要的最终结果是这样的

$result=[
      {
        "SKPD_ID": "40606000",
        "SKPD_SUB1_ID": "40606000-000000760-000000"
      },
      {
        "SKPD_ID": "40606000",
        "SKPD_SUB1_ID": "40606000-000000760-100000"
      },
    ]

在原始系统中,数组有多个数据孪生,我想要的是如果有孪生,结果数组将只取一个数据

【问题讨论】:

  • 为什么不删除array1中值的两个副本?
  • 好的,你的方法是什么?
  • @Nick 因为在原始数据中我想根据 array2 而不是从 array1 中的孪生数据中删除它
  • @nice_dev 我的约束是,如果 array1 与 array2 具有相同的数据,我想删除它,但我有困难,因为这两个数据没有索引来区分它们
  • @Newbie123 Yours 不会删除,而只是过滤掉重复项。

标签: php arrays data-structures foreach logic


【解决方案1】:

您似乎不想从数组 1 中删除数组 2,但您只想删除重复项?

要从数组中删除重复项,请使用 array_unique() https://www.php.net/manual/de/function.array-unique.php

这将准确地产生所需的输出

<?

   $array1= 
       array(   
       0=>array(
        "SKPD_ID"=> "40606000",
        "SKPD_SUB1_ID"=> "40606000-000000760-000000"
      ),
      1=> array(
        "SKPD_ID"=> "40606000",
        "SKPD_SUB1_ID"=> "40606000-000000760-000000"
      ),
      2=> array(
        "SKPD_ID"=> "40606000",
        "SKPD_SUB1_ID"=> "40606000-000000760-100000"
      )
    );


echo"Original array:<br>";
print_r($array1);
          
$array2= array_unique ($array1, SORT_REGULAR);          
    
echo"<br>Array after deduplication:<br>";
  print_r($array2);
?>

输出:

原始数组:数组([0] => 数组([SKPD_ID] => 40606000 [SKPD_SUB1_ID] => 40606000-000000760-000000)

[1] => 数组([SKPD_ID] => 40606000 [SKPD_SUB1_ID] => 40606000-000000760-000000)

[2] => 数组([SKPD_ID] => 40606000 [SKPD_SUB1_ID] => 40606000-000000760-100000))

############去重后的数组:

数组 ( [0] => 数组 ( [SKPD_ID] => 40606000 [SKPD_SUB1_ID] => 40606000-000000760-000000)

[2] => 数组([SKPD_ID] => 40606000 [SKPD_SUB1_ID] => 40606000-000000760-100000))

//正是你想要的结果:-)

【讨论】:

  • 实际上我所做的是删除数组1中的数据如果array2中有相同的数据但问题是array1有双数据,如果有双数据,那么你必须看看在 array2 有多少数据也是双倍的。这太难了,因为没有索引可以区分,但是感谢您的参考,也许我可以再试验一次
  • 所以我误解了这句话? “在原始系统中,数组有多个数据孪生,我想要的是如果有孪生,生成的数组将只取一个数据”也许您可以解释一下操作的用途。因为有多种方法可以得到想要的结果。我不明白您将删除数组 2 的条目与重复数据删除相结合的预期组合。
【解决方案2】:
<?php
$array1= [
  [
    "SKPD_ID" => "40606000",
    "SKPD_SUB1_ID"=> "40606000-000000760-000000"
  ],
  [
    "SKPD_ID"=> "40606000",
    "SKPD_SUB1_ID"=> "40606000-000000760-000000"
  ],
  [
    "SKPD_ID"=> "40606000",
    "SKPD_SUB1_ID"=> "40606000-000000760-100000"
  ]
];

$array2 = [
  [
    "SKPD_ID"=> "40606000",
    "SKPD_SUB1_ID"=> "40606000-000000760-000000"
  ]
];

$found = [];
$result = [];

foreach ($array1 as $el) {
    if (in_array($el, $array2)) {
        $json = json_encode($el);
        if (!in_array($json, $found)) {
             $found[] = $json;
             $result[] = $el;
        }
    }
    else {
        $result[] = $el;
    }
}

你可以看到这个脚本here的结果,会是

Array
(
    [0] => Array
        (
            [SKPD_ID] => 40606000
            [SKPD_SUB1_ID] => 40606000-000000760-000000
        )

    [1] => Array
        (
            [SKPD_ID] => 40606000
            [SKPD_SUB1_ID] => 40606000-000000760-100000
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多