2013-07-10 47 views
-1

我面臨着一個複雜的任務,這讓我很頭疼。假設我有選擇陣列是這樣的:找到一種方法來創建另一個複雜陣列的陣列列表

$options = {'Color' => {'Red, Green, Blue'}, 
      'Size' => {'S','M','L'}, 
      'Material' => {'Wool','Cotton'} 
      } 

另外,我有一組映射的:

{'Red', 'S', 'Cotton'} 
{'Red', 'M', 'Cotton'} 
{'Blue', 'S', 'Wool'} 

當我選擇通過某種方式的選項(選擇框從等),用於例如,當我選擇「紅色」我希望有一個這樣的數組:

$redArray = { 
       'Size' => {'S','M'}, 
       'Material' => {'Cotton'} 
       } 

類似地,當我選擇「M」選項,則結果將是:

$mArray = { 
      'Color => {'Red'}, 
      'Material' => {'Cotton'} 
      } 

也許我的解釋不夠清楚,希望你能幫助我...謝謝

+3

算法?聽起來像一個微不足道的循環。處理每個元素。 –

+0

它要麼非常簡單,要麼在問題中誇大了複雜性,要​​麼複雜得讓問題看起來過於簡單......需要更多的澄清。 –

+0

好吧,讓我更新我的問題 –

回答

2

例如使用array_merge_recursive

$ar1=array('color'=>"green"); 
$ar2=array('color'=>"blue"); 
$result = array_merge_recursive($ar1, $ar2); 

output : 
    Array 
    (
    [color] => Array 
    (
     [0] => green 
     [1] => blue 
    ) 

    ) 
+0

我更新了我的問題。希望你能幫我 –

0
input: 
{Red, Medium, Cotton} 
{Red, Large) 
{Blue, Medium) 
(Green, Small) 
(Green, Large) 

$r = array(); 
foreach($input as $i) 
{ 
    $k = $i[0]; 
    foreach(array_slice($i, 1) as $s) { 
    $r[$k][] = $s; 
    $r[$k][] = array_unique($r[$k]); 
    } 
} 
0

通過簡單的foreach容易

// Your initial arrays 
$from = array(
    array("Red", "Medium"), 
    array("Red", "Large"), 
    array("Blue", "Medium"), 
    array("Green", "Small"), 
    array("Green", "Large") 
); 

// The output array 
$output = array(); 
for ($i = 0; $i < count($from); $i++) { 
    $a = $from[$i]; 

    if (!array_key_exists($a[0], $output) { 
     $output[$a[0]] = array(); 
    } 
    if (!in_array($a[1], $output[$a[0]]) { 
     $output[$a[0]][] = $a[1]; 
    } 
} 

請注意,在from變量中採用簡單的鍵/值數組可能更容易。