首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel中从关联数组中删除A~+-B重复

在Laravel中从关联数组中删除A~+-B重复
EN

Stack Overflow用户
提问于 2022-10-24 20:14:54
回答 2查看 45关注 0票数 1

我有一个包含几乎相同条目的关联数组,除了交换键值对之外:

代码语言:javascript
复制
[
    [
        "partnerA" => "Alice",
        "partnerB" => "Alfred"
    ],
    [
        "partnerA" => "Alfred",
        "partnerB" => "Alice"
    ],
    [
        "partnerA" => "Alfred",
        "partnerB" => "Brandon"
    ]
]

我将数组存储在Laravel collection中,并尝试使用->unique()

代码语言:javascript
复制
  $partners = collect($array)->unique();

但是输出与输入的数组相匹配。

如何从数组中删除这样的副本,使每对都是唯一的,而不管键是否被交换?

期望的输出是:

代码语言:javascript
复制
[
    [
        "partnerA" => "Alice",
        "partnerB" => "Alfred"
    ],
    [
        "partnerA" => "Alfred",
        "partnerB" => "Brandon"
    ]
]

更新:到目前为止我尝试过的似乎是有效的.

代码语言:javascript
复制
$size = sizeof($partners);
for($i = 0; $i <= $size; $i++){
    $match = $partners[$i];
    $needle = ["partnerA" => $match["partnerB"], "partnerB" => $match["partnerA"]];
            
    if(in_array($needle, $partners)){
        unset($partners[$i]);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-24 22:43:46

对这些对进行排序,并将唯一键的值连接起来,然后根据结果进行筛选。

代码语言:javascript
复制
$unique_keys = array_keys(array_unique(array_map(
    function($a){
        sort($a);
        return implode("", $a);
    },
    $partners
)));

$res = array_filter(
    $partners,
    function($a)use($unique_keys) {
        return in_array($a, $unique_keys);
    },
    ARRAY_FILTER_USE_KEY
);

var_dump($res);

输出:

代码语言:javascript
复制
array(2) {
  [0]=>
  array(2) {
    ["partnerA"]=>
    string(6) "Alfred"
    ["partnerB"]=>
    string(5) "Alice"
  }
  [2]=>
  array(2) {
    ["partnerA"]=>
    string(6) "Alfred"
    ["partnerB"]=>
    string(7) "Brandon"
  }
}
票数 3
EN

Stack Overflow用户

发布于 2022-10-24 21:43:47

尝尝这个

代码语言:javascript
复制
$results = [
[
    "partnerA" => "Alfred",
    "partnerB" => "Alice"
],
[
    "partnerA" => "Alfred",
    "partnerB" => "Alice"
]
];

$newArray = [];
foreach($results as $result) {
    if(is_array($result)) {
        foreach($result as $key => $output) {
            $newArray[$key] = $output;
        }
    }
}
print_r(array_unique($newArray));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74186337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档