2013-01-08 42 views
1

我想要得到的組合鍵陣列中的所有組合鍵碼 - 這裏的例子:得到二維數組

$keys = array(
     array(
      'original', 
      'section 1', 
      'section 2' 
     ), 
     array(
      'original', 
      'section 1' 
     ), 
     array(
      'original', 
      'section 1' 
     ), 
     array(
      'original', 
      'section 1', 
      'section 2' 
     ), 
     array(
      'original', 
      'section 1' 
     ) 
); 

所有原始節將00000(5,因爲5個不同陣列的數字,但有可以是1到n個數組,不限於5),變體#15將是例如01010.我基本上想要使用該鍵獲取列表中的所有變體列表以獲取它們。我們假設每個數組中不超過9個部分+原始部分。

輸出應該是這樣的:

array(
    array(
     "key" => "00000", 
     "data" => array(
      "original", "original", "original", "original", "original" 
     ) 
    ), 
    array(
     "key" => "10000", 
     "data" => array(
      "section 1", "original", "original", "original", "original" 
     ) 
    ), 
    array(
     "key" => "20000", 
     "data" => array(
      "section 2", "original", "original", "original", "original" 
     ) 
    ), 
    array(
     "key" => "01000", 
     "data" => array(
      "original", "section 1", "original", "original", "original" 
     ) 
    ) 
    [...] 
) 

除了這一點,將是不錯的一個很好的方式來獲得它的其他方式了。給予鑰匙01010並讓所有部分恢復。

謝謝!

+0

我不知道別人,而是對我來說你的問題看起來太模糊了。 – inhan

+0

我只想要基於數組的內容的列表中的所有密鑰 – Tobias

+0

因此,例如, **'section1'**會返回'11111'和**'section 2'**會返回'2 ?? 2?'?我使用問號的原因是因爲索引0被每個數組中的**'original'**使用。 – inhan

回答

2

這裏是我想出了:

$options = array(); 
$counter1 = 0; 
foreach($keys as $values) { 
    $counter1++; 
    $counter2 = 0; 
    $options[$counter1] = array(); 
    foreach($values as $key => $value) { 
     if(isset($options[($counter1 - 1)])) { 
      foreach($options[($counter1 - 1)] as $old_val) { 
       $counter2++; 
       $old_array = $old_val['data']; 
       array_push($old_array, $value); 
       $options[$counter1][$counter2] = array(); 
       $options[$counter1][$counter2]['key'] = $old_val['key'] . $key; 
       $options[$counter1][$counter2]['data'] = $old_array; 
      } 
     } 
     else { 
      $counter2++; 
      $options[$counter1][$counter2] = array(); 
      $options[$counter1][$counter2]['key'] = $key; 
      $options[$counter1][$counter2]['data'] = array($value); 
     } 
    } 
} 
$all_options = end($options); 

你得到72分的結果是正確的,因爲它是3 * 2 * 2 * 3 * 2 = 72

+0

不錯!是的,這實際上正是我想要的! - 你可以看看上面更新的帖子,看看例子的輸出結果嗎?你認爲這是可能的嗎? – Tobias

+0

也增加了數據值。 – Pitchinnate

+0

完美!謝謝! :) – Tobias