【问题标题】:How to check if array has some elements same as another array and to pop those elements out of array [duplicate]如何检查数组是否具有与另一个数组相同的某些元素并将这些元素从数组中弹出[重复]
【发布时间】:2016-09-09 13:24:37
【问题描述】:

我有一个这样的array

array(1) {
  [0]=>
  string(16) "1785328791698338"
}

和其他array 这样的:

array(7) {
  [0]=>
  string(17) "10207252567926988"
  [1]=>
  string(17) "10208823390691752"
  [2]=>
  string(17) "10209064245580796"
  [3]=>
  string(16) "1274474365912572"
  [4]=>
  string(16) "1294280923934896"
  [5]=>
  string(16) "1317727711586522"
  [6]=>
  string(16) "1785328791698338"
}

我应该检查第一个数组中的某些元素(在这种情况下只有一个,但它可以变化)是否与第二个数组中的某些元素相同,如果是,则将它们从第一个数组中删除。我试过这样做,但它不起作用:

function findSameValuesOfArrays($arrayOne,$arrayTwo){
         $newArray=array();
         foreach($arrayOne as $a){
            $newArray[0]=$a;
         }
         foreach($arrayTwo as $b){
            $newArray[1]=$b;
         }
         if (strpos($newArray[1],$newArray[0])) {
            return true;
         }

    }

这只是为了查找是否有相同的元素,然后我可能会取消设置这些值所在的键。但函数返回NULL

【问题讨论】:

  • 简单来说你可以说:你想从第一个数组的第二个数组中删除所有元素。这意味着如重复的$result = array_diff($yourFirstArray, $secondArray); 中所述

标签: php arrays


【解决方案1】:

array_diff 完全符合您的要求。

$sourceArr = array(1,2,3,4,5);
$filterArr = array(2,4);
$result = array_diff($sourceArr, $filterArr);
var_dump($result);

结果:

array(3) {
  [0]=>
  int(1)
  [2]=>
  int(3)
  [4]=>
  int(5)
}

https://3v4l.org/IvmHH

【讨论】:

    【解决方案2】:

    你可以在这里使用array_intersect

    $arr3 = array_intersect($arr1,$arr2);
    print_r($arr3);
    

    这是一个例子:

    https://3v4l.org/kqPV2

    https://3v4l.org/qZpgf

    或者您可以阅读更多信息:http://php.net/manual/en/function.array-intersect.php

    【讨论】:

      【解决方案3】:

      试试这个:

      $arrFirst = array("1785328791698338","10207252567926988");
      $arrMain = array("10207252567926988","10208823390691752","10209064245580796","1274474365912572","1294280923934896","1317727711586522","1785328791698338");
      foreach ($arrFirst as $key => $value) {
         if(in_array($value, $arrMain )) { // check if value exist in seconf array
              unset($arrFirst[$key]); // if yes - unset that value
         }
      }
      

      【讨论】:

        【解决方案4】:

        您可以在此处使用 array_intersect 来返回一个数组,其中包含所有参数中存在的 array1 的所有值。然后是array_diff

        $arrFirst = array(0=>"1785328791698338",1=>"1785328791698334",3=>"1785328791698336");
        $arrMain = array(0=>"10207252567926988",1=>"10208823390691752",3=>"10209064245580796",4=>"1785328791698338");
        $arrIntersect = array_intersect( $arrMain,$arrFirst);
        $resultArray = array_diff($arrFirst, $arrIntersect);
        print "<pre>";print_r($resultArray);
        

        【讨论】:

          猜你喜欢
          • 2014-01-03
          • 2016-03-12
          • 1970-01-01
          • 2017-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-03
          • 2020-01-31
          相关资源
          最近更新 更多