2016-04-20 12 views
0

Ich arbeite gerade an einem Projekt, und es erfordert, ein Array so anzuordnen, dass keine gleichen Zahlen hintereinander kommen.Anordnen von Zahlen in einem Array PHP

Lassen Sie $a = [4,1,2,1,3,4,4,4], hier kommen die Zahlen 4 nacheinander. Ich brauche, um das zu vermeiden und die gewünschte Ausgabe muss oder zu $a = [4,1,4,1,4,2,3,4]

simiar sein, was ich getan hatte:

$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); 

Ausgänge:

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 Hier kommt wieder nacheinander.

Gibt es einen einfachen Weg, dies zu erreichen? Bitte helfen Sie mir, diese Situation zu lösen.

Vielen Dank im Voraus.

+0

ist es in Ihrer Frage ok „Let a $ = [4,1,2,1,3,4,4,4], hier die Zahlen nacheinander 4 kommen. Ich muss das vermeiden und die gewünschte Ausgabe muss oder ähnlich sein wie $ a = [4,1,4,1,4,2,3,4] " –

+0

Warum finden Sie nicht zuerst Duplikate und betten verschiedene Elemente dazwischen ein ? –

+0

@BrijalSavaliya Ich habe nicht verstanden, was Sie kommentiert. Dieses Array wird eingegeben und ich muss so arrangieren, dass keine gleichen Nummern nacheinander folgen. –

Antwort

2

Try this -

$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 für Sie nicht ändern, weil es die ganze Zeit funktioniert. Aber darf ich darauf hinweisen, dass, wenn eine Zahl mehr als $ n/2 mal vorhanden ist, die Lösung nicht existiert, während Ihr Code noch etwas ausgibt? (etwas stimmt natürlich nicht) – JoulinRouge

+2

Ja, ich habe diesen Fall bemerkt, es muss explizit behandelt werden. Trotzdem danke. –

+0

Perfekt, vielen Dank. –