2016-11-30 8 views
0

Meine Frage klingt vielleicht albern, aber ich weiß, dass es möglich ist zu tun. Ich versuche tatsächlich, das Array von MySQL zu machen, um sich von dem Array zu unterscheiden, das ich bereits shuffle habe. Ich möchte die Array-Schlüssel beibehalten, nur den Wert in anderer Reihenfolge. Hier2 verschiedene Array mit verschiedenen Werten

ist das Beispiel,

Array von MYSQL:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
    [7] => 8 
) 

Array nach shuffle:

Array 
(
    [0] => 3 
    [1] => 7 
    [2] => 8 
    [3] => 4 
    [4] => 1 
    [5] => 2 
    [6] => 5 
    [7] => 6 
) 

Wenn Sie bemerken, MYSQL array Taste 3 hat den gleichen Wert als shuffle array möchte ich es diff es. Wie kann ich das tun?

Hier ist mein Code:

function get_random_elements($array) { 
    $ori_array = $array; 

    echo "<pre>"; 
    print_r($ori_array); 
    echo "</pre>"; 

    shuffle($array); 

    echo "<pre>"; 
    print_r($array); 
    echo "</pre>"; 

    for($x=0; $x<count($array); $x++) { 
     if ($array[$x] == $ori_array[$x]) 
     { 
      $dupliarray[] = "Array value: ".$array[$x]." Key :".$x; 
      unset($array[$x]); 
     } 

    } 

    echo "<pre>"; 
    print_r($dupliarray); 
    echo "</pre>"; 

} 

$mysql_array = array(0=>'1',1=>'2',2=>'3',3=>'4',4=>'5',5=>'6',6=>'7',7=>'8'); 

get_random_elements($mysql_array); 
+0

Aufruf 'get_random_elements" Funktion rekursiv u ntil (das ist count ($ dupliarray) ist 0) Sie erhalten ein völlig anderes Array als das ursprüngliche Array. – Naga

+0

@Naga Hmm ... stimmt, aber wie rufe ich rekursiv? – MuthaFury

Antwort

2

Eine Lösung Array zu mischen sein kann, bis sie völlig verschieden von der Quelle Array wurde:

$sourceArray = [0, 1, 2, 3, 4, 5, 6, 7, 8]; 
$shuffledArray = $sourceArray; //because function shuffle will change passed array 

shuffle($shuffledArray);  
while (count(array_intersect_assoc($sourceArray, $shuffledArray))) { 
    shuffle($shuffledArray); 
} 

echo '<pre>'; 
var_dump($sourceArray, $shuffledArray); 
0

Ich schlage vor, diese Variante: Code in sandbox

$startArray = [ 
    0 => 1, 
    1 => 2, 
    2 => 3, 
    3 => 4, 
    4 => 5, 
    5 => 6, 
    6 => 7, 
    ]; 

function getShuffledArray($startArray) { 

    $shuffledArray = []; 

    // save value of last element for situation when we have last 2 elements of start array and one of them - last 
    $lastElement = end($startArray); 

    while (count($startArray)) { 
     $candidateIndex = array_rand($startArray); 
     if ($candidateIndex == count($shuffledArray)) { 
      while ($candidateIndex == count($shuffledArray)) { 
       $candidateIndex = array_rand($startArray); 
      } 
     } 
     $shuffledArray[] = $startArray[$candidateIndex]; 
     unset($startArray[$candidateIndex]); 

     // shuffle last two elements when one of them last (in start array) 
     if (count($startArray) == 2 && end($startArray) == $lastElement) { 
      $shuffledArray[] = end($startArray); 
      $shuffledArray[] = reset($startArray); 
      $startArray = []; 
     } 
    } 

    return $shuffledArray; 
} 

$shuffledArray = getShuffledArray($startArray); 
print_r ($shuffledArray); 
Verwandte Themen