2011-09-07 41 views
0

这使我疯了,但我一直在这个全部中午奋斗(即时通讯GMT + 2;))。如何计算/生成一个数组中的所有可能的值的字符串?

我想做一个公平的(我相信,但意识到事实证明,否则..)简单的任务。

可以说我有一个数组,看起来像这样:

Array 
(
    [0] => Array 
     (
      [OptionID] => 8748 
      [Values] => Array 
       (
        [0] => 11614 
        [1] => 11615 
       ) 
     ) 
    [1] => Array 
     (
      [OptionID] => 8749 
      [Values] => Array 
       (
        [0] => 11616 
        [1] => 11617 
       ) 
     ) 
) 

这个数组是用于生成与产品的所有可能的选择。可以说OptionID 8748的意思是“大小”,该数组中的值是'L'&'XL'。 OptionID 8749可以是“颜色”,其值为“红色”和“黑色”。

我想实现简单的任务来获取产品的四个独特的组合,像一个字符串:

11614 + 11616 11614 + 11617 11615 + 11616 11615 + 11617

但随后,不同的产品可能有第三种产品选择,所以它应该能够以无限的深度工作。

回答

1

基本上

$result = array_cartesian(array_pluck($a, 'Values')); 

和这里的辅助功能:

function array_pluck($a, $key) { 
    $r = array(); 
    foreach($a as $v) 
     $r[] = $v[$key]; 
    return $r; 
} 

function array_cartesian($_) { 
    if(count($_) == 0) 
     return array(array()); 
    $a = array_shift($_); 
    $c = array_cartesian($_); 
    $r = array(); 
    foreach($a as $v) 
     foreach($c as $p) 
      $r[] = array_merge(array($v), $p); 
    return $r; 
} 
+0

你的先生,你是我心目中的英雄今天!非常感谢! +10 – Ben

相关问题