【问题标题】:Remove duplicates array删除重复数组
【发布时间】:2018-05-08 03:56:44
【问题描述】:

我有一个数组看起来像这样,

Array
(
  [0] => Array
      (
          [id] => 224983
          [name] => James
          [weight] => 0
          [bank] => Bank A
          [transaction] => 1
          [total] => 7682000000
          [reference] => Edward
          [type] => BRANCH
          [reference_id] => 222818
          [account_number] => 1220007355285
      )
  [1] => Array
      (
          [id] => 224984
          [name] => James
          [weight] => 0
          [bank] => Bank A
          [transaction] => 1
          [total] => 7682000000
          [reference] => Edward
          [type] => BRANCH
          [reference_id] => 222819
          [account_number] => 1220007355285
      )
  [3] => Array
      (
          [id] => 224985
          [name] => Maria
          [weight] => 0
          [bank] => Bank B
          [transaction] => 1
          [total] => 1500000000
          [reference] => Andrey
          [type] => BRANCH
          [reference_id] => 247620
          [account_number] => 1220000412901
      )              
)

当 account_number、reference 和 name 相同时,我想删除另一个,并根据 id 保留最后一个...

请有人帮我找出来,我一直卡在这里,所以输出将是删除数组[0] with ['id] => 224983,其余数组将是结果

【问题讨论】:

标签: php arrays


【解决方案1】:

如果您只想比较数组的三个字段,则可以尝试以下方式。检查重复和未设置的先前条目。这里 $data 是数组输入

foreach ($data as $key => $row) {
    $id   = $row['id'];
    $name = $row['name'];
    $reference = $row['reference'];

    $flag = 0;
    for($i = $key + 1; $i < count($data); $i++)
    {
        if(($data[$i]['id'] == $id) && ($data[$i]['name'] == $name) && ($data[$i]['reference'] == $reference))
        {
            if($key != $i)
                unset($data[$key]);
        }
    }
}

结果是

Array
(
    [1] => Array
        (
            [id] => 224983
            [name] => James
            [weight] => 0
            [bank] => Bank A
            [transaction] => 1
            [total] => 7682000000
            [reference] => Edward
            [type] => BRANCH
            [reference_id] => 222818
            [account_number] => 1220007355285
        )

    [2] => Array
        (
            [id] => 224985
            [name] => Maria
            [weight] => 0
            [bank] => Bank B
            [transaction] => 1
            [total] => 1500000000
            [reference] => Andrey
            [type] => BRANCH
            [reference_id] => 247620
            [account_number] => 1220000412901
        )

)

【讨论】:

  • 谢谢,这帮助我摆脱了复杂的情况。
【解决方案2】:

试试下面的函数,这将有助于删除重复的数组。

function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}

【讨论】:

    【解决方案3】:

    这似乎不优雅,但我认为您需要循环访问您以前的数组元素来检查 ID。你可以创建一个类似这样的函数:

    function id_exists_prior(&$my_array, $array_index) {
        for($i = 0; $i < $array_index; $i++) {
            if($my_array[$i]['id'] === $my_array[$array_index]['id']) return false;
        }
        return true;
    }
    

    然后你可以在任何你想要的数组元素上调用它,或者循环整个数组来检查重复项。后者的一个例子:

    $your_array = [/*Your array data*/];
    for($key = 0; $key < count($your_array); $key++) { 
        if(id_exists_prior($your_array, $key)) //Do your thing
    }
    

    将数组键传递给函数的原因是函数只检查之前的重复项。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2011-06-29
      • 2011-03-22
      • 2011-09-26
      相关资源
      最近更新 更多