如何从multidimentional数组中替换重复值?

时间:2018-04-05 04:04:21

标签: php arrays

我有一个这样的数组:

[0] => array([location] => [10.1111111,106.2222222];);

[1] => array([location] => [10.1111111,106.2222222];)

[2] => array([location] => [10.3333333,106.444444444];)

[3] => array([location] => [10.1111111,106.2222222];)

[4] => array([location] => [10.3333333,106.444444444];)

我想保留第一个数组值(重复值),并用随机数替换所有剩余的重复值

[0] => array([location] => [10.1111111,106.2222222];)

[1] => array([location] => [10.54545422,106.136633434];)

[2] => array([location] => [10.3333333,106.444444444];)

[3] => array([location] => [10.323123232,106.656565654];)

[4] => array([location] => [10.44342266,106.87878787];)

我的代码,但它似乎不起作用:

foreach($dataMap as $items) {

            $temp = array();
            foreach($items as $value) {

                if(!isset($temp[$value])) {
                    $temp[$value] = '[10.888888,106.999999]';
                }
            }
            $items['location'] = $temp;
        }

2 个答案:

答案 0 :(得分:0)

你可以试试这个。它使用in_array可以在数组中查找数组的事实。为了绝对肯定没有重复(因为从理论上讲,一对随机值可能会重复),我们用循环来替换重复项,并测试数组中是否有任何值(使用array_unique)。 / p>

while (count(array_unique($dataMap, SORT_REGULAR)) != count($dataMap)) {
    // replace duplicates with random values
    for ($i = 1; $i < count($dataMap); $i++) {
        if (in_array($dataMap[$i], array_slice($dataMap, 0, $i)))
             $dataMap[$i] = array('location' => array(rand(), rand()));
    }
}

答案 1 :(得分:-1)

通常我创建一个列表或设置并验证该列表中的每个值,如果存在则替换小数值并添加到列表或设置其他添加值,由此我们实现唯一值。

这就是我在python中的表现。

import random

arr = list()
arr.append([10.1111111, 106.2222222])
arr.append([10.1111111, 106.2222222])
arr.append([10.3333333,106.444444444])
arr.append([10.1111111, 106.2222222])

print(arr)

# Set to check duplicates..
dup = set()
temp_arr = list()

for each_row in range(len(arr)):
    temp_arr.append([])
    for each_col in range(len(arr[each_row])):
        val = arr[each_row][each_col]
        if val in dup:  # found duplicate
            my_int = int(val)
            # new value
            new_val = round(random.uniform(my_int, my_int+1), 7)
            temp_arr[each_row].append(new_val)
            dup.add(new_val)
        else:
            dup.add(val)  # non duplicates.
            temp_arr[each_row].append(val)
print(temp_arr)