PHP-array_diff比较并删除所有类似的值

PHP-array_diff比较并删除所有类似的值,php,arrays,Php,Arrays,如果能给我一点帮助,我将不胜感激。我尝试了array_diff(),intersect组合,但未能获得预期的回报 下面是我想做的一个例子 第一个数组 Array ( [0] => 21 [1] => 2 [2] => 1 [3] => 2 ) 第二阵列 Array ( [0] => 21 [1] => 2 ) 使用array\u diff(firstarray,secondarray) Array (

如果能给我一点帮助,我将不胜感激。我尝试了
array_diff()
,intersect组合,但未能获得预期的回报

下面是我想做的一个例子

第一个数组

Array
(
    [0] => 21
    [1] => 2
    [2] => 1
    [3] => 2
)
第二阵列

Array
(
    [0] => 21
    [1] => 2
)
使用
array\u diff(firstarray,secondarray)

Array
(
    [2] => 1
)
但我想要什么

Array
(
    [2] => 1
    [3] => 2
)

来自firstarray和secondarray的密钥不一定相同。

这个小片段应该可以帮助您实现您想要的。这里我们将循环第二个数组,并从第一个数组中删除它找到的每个值的第一个匹配项

$first = array(0 => 21, 1 => 2, 2 => 1, 3 => 2);
$second = array(0 => 21, 1 => 2);

foreach ($second as $v) {
    unset($first[array_search($v, $first)]);
}
循环后从
$first
输出:

Array
(
    [2] => 1
    [3] => 2
)
如果希望保持
$first
数组的完整性,请将其复制到另一个变量中,并循环该变量,即
$new=$first
并从
$new
而不是
$first
取消设置


    • 这个小片段应该可以帮助你实现你想要的。这里我们将循环第二个数组,并从第一个数组中删除它找到的每个值的第一个匹配项

      $first = array(0 => 21, 1 => 2, 2 => 1, 3 => 2);
      $second = array(0 => 21, 1 => 2);
      
      foreach ($second as $v) {
          unset($first[array_search($v, $first)]);
      }
      
      循环后从
      $first
      输出:

      Array
      (
          [2] => 1
          [3] => 2
      )
      
      如果希望保持
      $first
      数组的完整性,请将其复制到另一个变量中,并循环该变量,即
      $new=$first
      并从
      $new
      而不是
      $first
      取消设置

      函数数组\u true\u diff($arrayOne,$arrayTwo=[])){
      if(count($arrayOne)$value){
      如果(!isset($arrayTwo[$key])| |$arrayTwo[$key]!=$value){
      $diff[$key]=$value;
      }
      }
      返回$diff;
      }
      
      print\r(array\u true\u diff(firstarray,secondarray))

      上述函数可以满足您的要求。

      函数数组\u true\u diff($arrayOne,$arrayTwo=[]){
      if(count($arrayOne)$value){
      如果(!isset($arrayTwo[$key])| |$arrayTwo[$key]!=$value){
      $diff[$key]=$value;
      }
      }
      返回$diff;
      }
      
      print\r(array\u true\u diff(firstarray,secondarray))

      上述功能可以满足您的要求。

      在这种情况下,您可以使用“in_array”检查是否存在,使用“array_search”获取密钥,使用“unset”从数组中删除元素,如下所示:

          $array1 = array(21, 2, 1, 2);
          $array2 = array(21, 2);
          $result = array();
          for ($i=0; $i < count($array1) ; $i++) { 
              if (in_array($array1[$i], $array2)) {
                  unset($array2[array_search($array1[$i], $array2)]);
              } else {
                  array_push($result,$array1[$i]);
              }
          }
      
      在这种情况下,您可以使用“in_array”检查是否存在,使用“array_search”获取密钥,使用“unset”从数组中删除元素,如下所示:

          $array1 = array(21, 2, 1, 2);
          $array2 = array(21, 2);
          $result = array();
          for ($i=0; $i < count($array1) ; $i++) { 
              if (in_array($array1[$i], $array2)) {
                  unset($array2[array_search($array1[$i], $array2)]);
              } else {
                  array_push($result,$array1[$i]);
              }
          }
      
      尝试以下功能:

      function arrayDiff( $a, $b ) {
      
          $a = array_count_values($a);
          $b = array_count_values($b);
      
          $out = array();
      
          foreach( $a as $key => $value ) {
      
              if( isset( $b[ $key ] ) ) {
                  $value -= $b[ $key ];
              }
      
              $out = array_merge( $out, array_fill( 0, $value, $key ) );
          }
      
          return $out;
      }
      
      print_r( arrayDiff( $a, $b ) );
      
      尝试以下功能:

      function arrayDiff( $a, $b ) {
      
          $a = array_count_values($a);
          $b = array_count_values($b);
      
          $out = array();
      
          foreach( $a as $key => $value ) {
      
              if( isset( $b[ $key ] ) ) {
                  $value -= $b[ $key ];
              }
      
              $out = array_merge( $out, array_fill( 0, $value, $key ) );
          }
      
          return $out;
      }
      
      print_r( arrayDiff( $a, $b ) );
      

      你必须写你自己的函数才能做到这一点为什么你还想要2?你必须写你自己的函数才能做到这一点为什么你还想要2?