【问题标题】:PHP - Make an associative array unique, key -> value and value -> keyPHP - 使关联数组唯一,键->值和值->键
【发布时间】:2013-02-09 00:13:56
【问题描述】:

我在 php 中有一个小问题,我发现很难用语言来解释。我有一个包含键值的关联数组。我想做一个函数(或者如果已经有一个函数),它将一个数组作为输入并删除重复项,但两种方式都可以。

例如:

在我的数组中,我有 {a -> b} {a -> c} {b -> a} {b -> c} ...

从这个角度来看,似乎没有任何重复,但对我来说 {a -> b} 和 {b -> a} 是重复的。所以我希望该函数将其视为重复项并仅返回其中一个。

我尝试使用 array_flip / array_unique 在循环中交换键和值,但效果不佳。

即使它是一个大长度的数组,你能帮忙找到一种方法吗?或者如果有一个 php 函数可以做到这一点。

非常感谢您的帮助,谢谢。


有代码来说明这个想法:

对于这样的数组:

Array ( 
    [0] => Array ( [0] => a [1] => b)
    [1] => Array ( [0] => a [1] => c )
    [2] => Array ( [0] => b [1] => a )
    [3] => Array ( [0] => b [1] => c )
)

【问题讨论】:

  • 你能给出更详细的代码示例吗?
  • 所以你只想删除相同的对,即a->b & b->a,而不是a->b & a->ca->b & c->b?
  • {a -> b} {a -> c} 您是否有多个同名键(不可能)..?如果我理解正确,如果键 a 也作为值存在,例如 b => a 它对你来说是重复的吗?如果不是,那么array_diff_assoc() 可能就是您正在寻找的功能..
  • 完全是 Alasdair,不幸的是我不知道 Miloshio。
  • [0] => Array ( [0] => a [1] => b) 这不是关联数组,要么您的问题具有误导性,要么您的示例错误。我猜是前者,因为您说的是重复键,这是不可能的。

标签: php unique associative-array key-value array-flip


【解决方案1】:

这将删除您的重复项

foreach($array as $key => $value){
     if (isset($array[$key])){
        if(isset($array[$value])){
            if($array[$value] == $key){
                unset($array[$value]);
            }
        }
     }
 }

【讨论】:

  • 使用数组<?php $array = array( 'a' => 'b', 'b' => 'a', 'c' => 'd', 'd' => 'c' ); ?>,数组返回空
  • 返回数组 ( [a] => b [c] => d )
  • 我没有问这个问题,@StringerB 做了,我鼓励他也标记你的答案
  • 感谢您的回复,说实话我看不懂您的代码!
  • $array 是您的数组,如果您执行 foreach,它将删除所有重复值,如果您的数组是 $array = array( 'a' => 'b', 'b' = > 'a', 'c' => 'd', 'd' => 'c' );结果是数组 ( [a] => b [c] => d )
【解决方案2】:

这应该可行:

function cleanArray($array)
{
   $newArray = array();
   foreach ($array as $key => $val) {
      if (isset($array[$val]) && $array[$val] == $key) {
         if (!isset($newArray[$key]) && !isset($newArray[$val])) {
            $newArray[$key] = $val; 
         }      
         unset($array[$key], $array[$val]);
      }
   }    
   return array_merge($array, $newArray);
}

Working example here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多