2016-04-20 51 views
0

我目前正在處理項目,它需要安排一個數組,使得不會有相同的數字連續出現。排列數組中的數字PHP

$a = [4,1,2,1,3,4,4,4],這裏數字4連續來。我需要避免和所需的輸出必須或simiar到$a = [4,1,4,1,4,2,3,4]

我做了什麼:

$a=[4,1,2,1,3,4,4,4]; 
for($i=0;$i<count($a)-1;$i++) 
{ 
    if($a[$i]==$a[$i+1]) 
    { 
     $k=$j=$i+1; 
     while($a[$j]==$a[$k]) 
     { 
      $k++; 
      if($k >= count($a)) 
       $k=0; 
     } 
     $temp=$a[$j]; 
     $a[$j]=$a[$k]; 
     $a[$k]=$temp; 
    } 
} 
var_dump($a); 

輸出:

array (size=8) 
    0 => int 4 
    1 => int 4 
    2 => int 2 
    3 => int 1 
    4 => int 3 
    5 => int 4 
    6 => int 1 
    7 => int 4 

這裏4又連續來了。

有沒有簡單的方法來實現這一點?請幫我解決這種情況。

在此先感謝。

+0

它是確定你的問題 「讓$ A = [4,1,2,1,3,4,4,4],這裏的數字4來連續。我需要避免這種情況,並且所需的輸出必須是或類似於$ a = [4,1,4,1,4,2,3,4]「 –

+0

爲什麼不先找到重複項並在其間嵌入不同的元素? –

+0

@BrijalSavaliya我不明白你評論了什麼。該數組將被輸入,並且我必須安排這樣的連續不變的數字。 –

回答

2

試試這個 -

$a=[4,1,2,1,3,4,4,4]; 
$n = count($a); 
for($k=0;$k<$n;$k++) 
{ 
    for($i=0;$i<$n-1;$i++) 
    { 
      if($a[$i]==$a[$i+1]) 
      { 
        $cir = ($i+$k)%$n; 
        $temp=$a[$i+1]; 
        $a[$i+1]=$a[$cir]; 
        $a[$cir]=$temp; 
      } 
    } 
} 
var_dump($a); 
+1

+1,因爲它始終工作。但是,我可以指出,如果一個數字存在超過$ n/2倍的解決方案不存在,而你的代碼仍然輸出一些東西? (當然有錯誤) – JoulinRouge

+2

是的,我注意到這種情況,它需要明確處理。不過謝謝。 –

+0

完美,非常感謝。 –