【问题标题】:How to remove duplicate entries (which have swapped values) from an array?如何从数组中删除重复条目(已交换值)?
【发布时间】:2015-05-30 16:15:58
【问题描述】:

我有一个名为 $clashes 的数组,其中包含数字数组。

因此 $clashes 的格式为:

$clashes = [
    [
        "s1_id" => 26,
        "s2_id" => 27
    ],
    //.......
];

假设我的数组在填充数据后如下所示:

$clashes = [
    [
        "s1_id" => 26,
        "s2_id" => 27
    ],
    [
        "s1_id" => 27,
        "s2_id" => 26
    ],
    [
        "s1_id" => 26,
        "s2_id" => 27
    ],
    [
        "s1_id" => 27,
        "s2_id" => 26
    ]
];

由于这些条目基本相同,删除所有重复条目同时在数组中至少保留一个条目的最佳方法是什么?

编辑:

示例输出:

$clashes = [
    [
        "s1_id" => 26,
        "s2_id" => 27
    ]
];

【问题讨论】:

  • 我不明白你想做什么。排序?检查?删除条目?
  • 我想删除包含相同值的条目,同时在数组中至少保留一个条目。
  • 你已经给出了一个示例输入,你能给我们一个示例输出吗?
  • 你删除的不是同一个值,而是同一个键
  • $clashes[0] 为什么不呢?

标签: php arrays sorting logic


【解决方案1】:

这是一种相当蛮力的方法。它检查s1_ids2_id 是否等于下一个数组的s1_ids2_id

function fixYourArray($arr){
    for ($i=0; $i<count($arr)+1; $i++){
        if ($arr[$i]["s1_id"] == $arr[$i+1]["s1_id"]){
            array_pop($arr);
        }
        if ($arr[$i]["s2_id"] == $arr[$i+1]["s2_id"]){
            array_pop($arr);
        }
        if ($arr[$i]["s1_id"] == $arr[$i+1]["s2_id"]){
            array_pop($arr);
        }
        if ($arr[$i]["s2_id"] == $arr[$i+1]["s1_id"]){
            array_pop($arr);
        }
    }
    // else just return 
    return $arr;
}

print_r($clashes);
$clashes = fixYourArray($clashes);
print('<br />');
print_r($clashes);

我确信有一个更优雅的解决方案。

编辑:我删除了条件中的回报。这现在应该对你有用。

【讨论】:

  • 谢谢,这很好用。我忘记了 array_pop() 函数。
  • 嗨。不幸的是,这对我来说不能正常工作。这是我的输入数据:i.gyazo.com/3400afb78f620c1ed76d5cb40a67a826.png,这是输出的数据:i.gyazo.com/201748bd376e21a6c07bd0b6b5fccf1f.png。如您所见,在我运行此函数后,数组中仍然存在基本相同的条目。什么可能导致问题?
  • 我应该提一下,输入的数据不是永久的,会根据用户选择的内容而改变。
  • @LiamPotter,我已经编辑了我的答案。现在它通过数组并删除所有欺骗。也许这对你有用。此外,例如,您可能需要遍历每个索引到所有索引以删除 $arr[0]["s2_id"] == $arr[3]["s1_id"] 中的欺骗。我现在必须回去工作。
  • 嗨。我收到错误:未定义的偏移量 '2' 与更新的代码。
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2015-06-10
  • 2015-09-24
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多