找到一种从另一个复杂数组创建数组列表的方法

时间:2013-07-10 09:02:40

标签: php algorithm

我正面临一项令我头痛的复杂任务。假设我有这样的选项数组:

$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 :(得分: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
    )

   )

答案 1 :(得分: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]);
    }
}

答案 2 :(得分: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变量中使用简单的键/值数组可能更容易。