2012-10-24 135 views
1

也許我有一個愚蠢的時刻,但我似乎無法在我的腦海中工作。複雜的陣列來比較套裝

我會試着解釋一下: -

我有三個 '套'。每個集合包含6個對象。我需要一個循環(或一系列嵌套循環)來產生這些集合的每個組合。

這是一款遊戲,我想寫一個腳本來比較裝甲套裝 - 傷心,我知道。這組數組看起來像這樣: -

class => array(
    set1 => array(
    hat item => array(stats) 
    glove item => array(stats) 
    ... 
    set2 => array(
    hat item => array(stats) 
    ... 
    set3 => array(
    ... 

) 

這可能比我想象的要簡單得多(或者更加困難?)。

想法歡迎!

謝謝, Ruu。

編輯: -

確定這裏是一個數組的樣品,我已經去掉了多餘的統計資料很多,剛離開一個每件: -

$setinfo = array(
    'rk' => array(
     'set1' => array(
      'hat' => array(
       'will' => 114, 
      ), 
      'shoulders' => array(
       'will' => 78, 
      ), 
      'shirt' => array(
       'will' => 78, 
      ), 
      'gloves' => array(
       'will' => 78, 
      ), 
      'trousers' => array(
       'will' => 78, 
      ), 
      'boots' => array(
       'will' => 114, 
      ), 
     ), 
     'set2' => array(
      'hat' => array(
       'will' => 78, 
      ), 
      'shoulders' => array(
       'will' => 78, 
      ), 
      'shirt' => array(
       'will' => 114, 
      ), 
      'gloves' => array(
       'will' => 78, 
      ), 
      'trousers' => array(
       'will' => 114, 
      ), 
      'boots' => array(
       'will' => 78, 
      ), 
     ), 
     'set3' => array(
      'hat' => array(
       'will' => 78, 
      ), 
      'shoulders' => array(
       'will' => 114, 
      ), 
      'shirt' => array(
       'will' => 78, 
      ), 
      'gloves' => array(
       'will' => 114, 
      ), 
      'trousers' => array(
       'will' => 78, 
      ), 
      'boots' => array(
       'will' => 78, 
      ), 
     ), 
    ) 
); 

從這個例子(我後期會比較其他的數據,)'理想'的作品是set1的帽子和靴子,set2的襯衫和褲子,以及set3的手套和肩膀。

我的查詢是如何最好地制定一個循環,它可以生成每個排列的'結果'數組,以便稍後進行比較。

+0

只需添加您的全陣列和預期產出......你必須讓你的問題看起來像一個遊戲太 – Baba

+1

請提供更多的輸入和你想要的輸出。 –

+0

聽起來像你想看看排列組合。 – clentfort

回答

2

這裏是this guy實現:

function array_cartesian_product($arrays) 

{ 
    $result = array(); 
    $arrays = array_values($arrays); 
    $sizeIn = sizeof($arrays); 
    $size = $sizeIn > 0 ? 1 : 0; 
    foreach ($arrays as $array) 
     $size = $size * sizeof($array); 
    for ($i = 0; $i < $size; $i ++) 
    { 
     $result[$i] = array(); 
     for ($j = 0; $j < $sizeIn; $j ++) 
      array_push($result[$i], current($arrays[$j])); 
     for ($j = ($sizeIn -1); $j >= 0; $j --) 
     { 
      if (next($arrays[$j])) 
       break; 
      elseif (isset ($arrays[$j])) 
       reset($arrays[$j]); 
     } 
    } 
    return $result; 
} 
$combinations = array_cartesian_product($sets); 

下面是一個簡單的測試案例:http://phpfiddle.org/main/code/m1i-w7m

+0

乍一看,工作,吐出一個512元素的數組,這正是我期待的。然而,每個元素只有3個項目,當我期待每個組合6項目? –

+0

每一套都有一個元素,所以假設你的套裝是:一套所有的帽子,一套所有的靴子,一套所有的手套等,你應該得到所有可能的組合。另外,更新了測試,我的設置是錯誤的。 –

+0

它的工作原理!不得不重新安排我的陣列。最初我有三個6元素的數組,我剛把它重構爲6個三元素的數組。例如,現在是帽子(1,2),靴子(1,2),手套(1,2),而不是set1(hat1,boot1,glove1),set2(hat2,boot2,glove2)。謝謝! XD –