2016-04-20 22 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

完美,非常感谢。 –