multidimensional Array相同值删除数组

时间:2017-10-31 20:29:57

标签: php arrays multidimensional-array

大家好,我正在努力解决一个问题,但无法在网上找到答案。 也许我犯了一个错误而不是抱歉,但我找到的答案并不是我搜索的地方。

这是我的问题

  ["acList"]=>
  array(356) {
    [0]=>
    array(36) {
      ["Id"]=>
      int(434367)
      ["Rcvr"]=>
      int(154)
      ["HasSig"]=>
      bool(true)
      ["Sig"]=>
      int(19)
      ["Icao"]=>
      string(6) "06A0BF"
      ["Bad"]=>
      bool(false)
      ["Reg"]=>
      string(6) "A7-BDA"
      ["FSeen"]=>
      string(21) "/Date(1509481499558)/"
    }
    [1]=>
    array(43) {
      ["Id"]=>
      int(3753696)
      ["Rcvr"]=>
      int(149)
      ["HasSig"]=>
      bool(true)
      ["Sig"]=>
      int(23)
      ["Icao"]=>
      string(6) "3946E0"
      ["Bad"]=>
      bool(false)
      ["Reg"]=>
      string(6) "A7-BDA"
      ["FSeen"]=>
      string(21) "/Date(1509481476453)/"
    }

我希望当“Reg”与他只移除一个相同的数组时相同(如果可能的话,基于FSeen)。

我尝试制作新阵列并将它们组合起来,我尝试了array_unique,但这并不是我想做的事情。

我希望有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

它不是最有效的方式,也不适合大型数据集,但这可能有效:

$aArray = array(array('id' => 1), array('id' => 2), array('id' => 1));

// create a tmp array to hold values we want to check
$aTmpArray = array();

// loop over the array
foreach ($aArray as $iPos => $aItem) {

    if(!isset($aTmpArray[$aItem['id']])){
        // if the item doesnt exist in tmp array, add it    
        $aTmpArray[$aItem['id']] = null;
    }else{
        // if the item exists, remove this entry from aArray
        unset($aArray[$iPos]);
    }
}

// set for gc
$aTmpArray = null;

它将保留第一个结果并删除id的任何副词重复/出现。