2012-11-26 142 views
0

我有個PHP數組:重置重複值在PHP陣列

$arr = array(1,2,3,3,4,6,6); 

我想找到的任一重複中的每個重複的對的位置(任一3並且或者6),用蘭特重置值(1 ,8)。我會如何去做這件事?我基本上需要確保所有的數組值是不同的。

+0

不,我已經通過PHP函數看了一下,但我有困難的返回重複元素的鍵/索引。 – user1114864

回答

1

您可以嘗試

$arr = array(1,2,3,3,4,6,6); 
$dup = array_diff_assoc($arr,array_unique($arr)); 
$v = mt_rand(1, 8); 

foreach ($dup as $k) { 
    while (in_array($v, $arr)) { 
     $v = mt_rand(1, 8); 
    } 
    $arr[$k] = $v; 
} 

echo "<pre>"; 
print_r($arr); 
0

一個簡單的方法就是記錄中有多少項目在數組中,使用array_unique,最後使用蘭特填充數組:

$size = count($arr); 
$arr = array_unique($arr); 
while (count($arr) < $size) { 
    $arr[] = rand(1,8,$arr); 
} 

你想要重複這一點,直到數($ ARR) == count(array_unique($ arr))。你也可以使用in_array()和一個循環來創建一個隨機函數,該函數可以非常容易地給出數組中不存在的隨機值。