我有一个这样的数组:
[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;
}
答案 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)