Php 删除阵列中的重复项

Php 删除阵列中的重复项,php,arrays,Php,Arrays,我有一个像这样的数组 Array ( [0] => Array ( [id] => 224983 [name] => James [weight] => 0 [bank] => Bank A [transaction] => 1 [total] => 7682000000 [reference] =&

我有一个像这样的数组

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
      )              
)
当帐号、参考号和名称相同时,我想删除另一个,并根据id保留最后一个


请有人帮我找出答案,我被困在这里,因此输出将是删除数组[0],带有['id]=>224983,其余数组将是结果

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

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

若你们特别只想比较数组的三个字段,那个么你们可以试试下面的方法。检查重复和取消设置以前的条目。这里$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]);
        }
    }
}

这看起来很不雅观,但我认为您需要遍历以前的数组元素来检查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;
}
function id\u exists\u previor(&$my\u array,$array\u index){
对于($i=0;$i<$array_index;$i++){
if($myu数组[$i]['id']==$myu数组[$array\u index]['id'])返回false;
}
返回true;
}
然后,您可以在任何想要的数组元素上调用它,或者在整个数组中循环以检查重复项。后者的一个例子是:

$your_array = [/*Your array data*/];
for($key = 0; $key < count($your_array); $key++) { 
    if(id_exists_prior($your_array, $key)) //Do your thing
}
$your_array=[/*您的数组数据*/];
对于($key=0;$key
将数组键传递给函数的原因是,函数只检查先前的重复项


希望这有帮助

到目前为止你做了什么?@Eddie我一直在用这个,但还是一样。因为它是多维数组。@hungrykoala谢谢你的回复,但那没用。你试过了吗?这篇文章包含了许多关于如何在多维数组中删除重复项的答案。谢谢,这帮助我摆脱了复杂的局面。
$your_array = [/*Your array data*/];
for($key = 0; $key < count($your_array); $key++) { 
    if(id_exists_prior($your_array, $key)) //Do your thing
}