如何在 PHP 中减去两个数组

How about subtraction two arrays in PHP

我有 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"
      },
    ]

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

您似乎不想从数组 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);
?>

Output:

original Array: 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 ) )

############ Array after deduplication:

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

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

//exactly the result you desired :-)

<?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
        )

)