删除数组中的重复项

时间:2017-04-19 12:59:31

标签: php

以下是将唯一值存储到变量的代码。

$filtermodel = array_unique($list2);

输出:

Array
(
[0] => 15592
[1] => 182
[4] => 14208
[7] => 183
[11] => 184,185,186
[15] => 174
[16] => 177
[23] => 184,186
[24] => 184,185,186,187
[29] => 179
[38] => 188
[41] => 174,176,184,185,186,187
 )

以上array key[11] contains 184,185,186key[23][24]包含与key[11]相同的内容。如何删除数组中的重复项?有帮助吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

你可以在数组中的每个元素上使用foreach并使用逗号,进行爆炸,然后在结果列表中执行唯一

这是Demo

答案 1 :(得分:0)

如果我们假设'182,186'例如是一个整数数组并且正确地试图实现以下工作:

如果没有,那么请考虑更好地指出你想要实现的目标

$mArray = array(
    15592,
    182,
    14208,
    183,
    array(184,185,186),
    174,
    177,
    array(184,186),
    array(184,185,186,187),
    179,
    188,
    array(174,176,184,185,186,187),
);


$mFinalArray = [];

foreach($mArray as $currentObject)
    if(!is_array($currentObject) && !in_array($currentObject, $mFinalArray))
       $mFinalArray[] = $currentObject;
    else if(is_array($currentObject))
        foreach($currentObject as $currentObjectInside)
            if(!in_array($currentObjectInside, $mFinalArray))
                $mFinalArray[] = $currentObjectInside;

sort($mFinalArray);

print_r($mFinalArray);
  

输出:

Array
(
    [0] => 174
    [1] => 176
    [2] => 177
    [3] => 179
    [4] => 182
    [5] => 183
    [6] => 184
    [7] => 185
    [8] => 186
    [9] => 187
    [10] => 188
    [11] => 14208
    [12] => 15592
)

答案 2 :(得分:0)

您可以使用array_walk传递引用,使用第三个参数(userdata)作为已使用值的字典:

array_walk($array, function(&$item, $_, &$dict) {
    $values = explode(',', $item);

    $item = implode(',', array_filter($values, function ($value) use (&$dict) {
        // If value already in the dictionary, just skip it.
        if (isset($dict[$value])) {
            return false;
        }

        // Add value to the dictionary and not filter it out.
        return $dict[$value] = true;
    }));
}, []);

这是working demo

答案 3 :(得分:0)

尝试使用foreach循环,并且每行包含','符号尝试使用explode。

您还可以创建一个数组,仅用于保存现有值,以便以后检查它们是否存在。

简单示例 -

$unique_values = [];

$all_values = array (
  [0] => 15592
  [1] => 182
  [4] => 14208
  [7] => 183
  [11] => 184,185,186
  [15] => 174
  [16] => 177
  [23] => 184,186
  [24] => 184,185,186,187
  [29] => 179
  [38] => 188
  [41] => 174,176,184,185,186,187
);

foreach( $all_values as $av ) {
  if( strpos( $av, ',' ) !== false ) {
    $av = explode( ',', $av );

    foreach( $av as $a ) {
      array_push( $unique_values, $a );
      array_unique( $unique_values );

      $result = !empty( array_intersect( $unique_values, $a ) );
    }
  }
}

我没有测试这段代码,但是我用它来解释逻辑。