删除数组php中多次存在的元素的索引

时间:2017-09-17 19:10:26

标签: php arrays codeigniter

我有以下数组,

Array
(
    [0] => 5600
    [1] => 5600
    [2] => 5500
    [3] => 5500
    [4] => 5003
    [5] => 5002
    [6] => 5001
    [7] => 768
    [8] => 768
    [9] => 767
    [10] => 730
    [11] => 666
    [12] => 575
)

现在我要删除在数组中存在多次的元素的索引。例如,我想要上面给出的数组。

Array
(

    [0] => 5003
    [1] => 5002
    [2] => 5001
    [3] => 767
    [4] => 730
    [5] => 666
    [6] => 575
)

如果有人有钥匙,请分享您的想法。

5 个答案:

答案 0 :(得分:2)

使用array_unique消除重复值,使用array_values恢复索引:

print_r(array_values(array_unique($arr)));

<强>更新

$new = [];
foreach (array_count_values($arr) as $k => $v) {
     if ($v == 1) {
         $new[] = $k;
     }
}

作为array_filter的oneliner(自php5.6起):

$new = array_filter(
    array_count_values($arr), function($v, $k) {
        return $v == 1;
    },
     ARRAY_FILTER_USE_BOTH
);

答案 1 :(得分:2)

<?php

// sample input
$arr = array(1,1,2,2,2,3,4,5);

// input
print_r($arr);

// to retain keys 
print_r( 
    array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
);

// to reset keys using array_values
print_r( 
array_values(
    array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
)
);

?>

测试结果

akshay@db-3325:/tmp$ php test.php 
 Array
(
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 2
    [4] => 2
    [5] => 3
    [6] => 4
    [7] => 5
)
Array
(
    [5] => 3
    [6] => 4
    [7] => 5
)
Array
(
    [0] => 3
    [1] => 4
    [2] => 5
)

答案 2 :(得分:0)

谢谢你的提问。我的解决方案不是很好。我用你的问题做了一点测试驱动开发。

{
  "destinations": [
    "6598760000",
    "+659870001",
    "tel+659870002",
    "+33(509)758-000"
  ],
  "template": {
    "source": "BRAND",
    "text": "Your message for all clients"
  }
}

答案 3 :(得分:0)

使用简单的循环。 计算每个值出现的次数。然后循环通过这些频率。如果该值仅在添加到我们想要的数组时发生。

<?php
function only_unique(array $values) {
    $result = $freq = array();
    foreach($values as $value)
        isset($freq[$value]) ? $freq[$value]++ : $freq[$value] = 1; 
    foreach($freq as $key => $value)
        if($value == 1)
            $result[] = $key;

    return $result;
}

$nums = [1,2,2,3,3,3,4];
var_dump(only_unique($nums));

输出:

array(2) {
  [0]=>
  int(1)
  [1]=>
  int(4)
}

以上类似于:

$desired =
    array_keys(
        array_filter(
            array_count_values($nums), function($v) {
                return $v == 1;
            }
        )
    );

答案 4 :(得分:0)

这里提供的几乎所有答案都是正确的....但是,再次...... 这是另一个答案:

 <?php
    $arr    = [
        5600, 5600, 5500, 5500, 5003, 5002,
        5001, 768,  768,  767,  730,  666,   575,
    ];

    function arraySansDuplicates($array){
        $result             = [];
        foreach($array as $value){
            if(!in_array($value, $result)){
                $result[]   = $value;
            }else{
                $key        = array_search($value, $result);
                unset($result[$key]);
            }
        }
        return array_values($result);
    }

    var_dump( arraySansDuplicates($arr) );