繁体   English   中英

2个数组,找到每个排列

[英]2 arrays, find every permutation

我有很多作为产品选项的阵列(下面的示例):

$option_array[] = array(
    "name" => "delivery",
    "options" => array(
        "sat", "sun")
);
$option_array[] = array(
    "name" => "colour",
    "options" => array(
        "red", "blue", "green")
);
$option_array[] = array(
    "name" => "size",
    "options" => array(
        "small", "medium", "large")
);

对我来说,将每个排列作为一个foreach循环的最佳方法是什么,同时又相当有效。 我需要在数据库中为每种可能的组合输入一个值(因此在此示例中应为18个值或18个迭代)。 如何获得结果排列的数组?

预期产量:

array(18){
    [0] => array(3){
        "delivery" => "sat",
        "colour" => "red",
        "size" => "small",
    }
    [1] => array(3){
        "delivery" => "sat",
        "colour" => "red",
        "size" => "medium",
    }
    [2] => array(3){
        "delivery" => "sat",
        "colour" => "red",
        "size" => "large",
    }
    [3] => array(3){
        "delivery" => "sat",
        "colour" => "blue",
        "size" => "small",
    }
    [4] => array(3){
        "delivery" => "sat",
        "colour" => "blue",
        "size" => "medium",
    }
    [5] => array(3){
        "delivery" => "sat",
        "colour" => "blue",
        "size" => "large",
    }
    [6] => array(3){
        "delivery" => "sat",
        "colour" => "green",
        "size" => "small",
    }
    [7] => array(3){
        "delivery" => "sat",
        "colour" => "green",
        "size" => "medium",
    }
    [8] => array(3){
        "delivery" => "sat",
        "colour" => "green",
        "size" => "large",
    }
    [9] => array(3){
        "delivery" => "",
        "colour" => "red",
        "size" => "medium",
    }        [10] => array(3){
        "delivery" => "sun",
        "colour" => "red",
        "size" => "small",
    }
    [11] => array(3){
        "delivery" => "sun",
        "colour" => "red",
        "size" => "medium",
    }
    [12] => array(3){
        "delivery" => "sun",
        "colour" => "red",
        "size" => "large",
    }
    [13] => array(3){
        "delivery" => "sun",
        "colour" => "blue",
        "size" => "small",
    }
    [14] => array(3){
        "delivery" => "sun",
        "colour" => "blue",
        "size" => "medium",
    }
    [15] => array(3){
        "delivery" => "sun",
        "colour" => "blue",
        "size" => "large",
    }
    [16] => array(3){
        "delivery" => "sun",
        "colour" => "green",
        "size" => "small",
    }
    [17] => array(3){
        "delivery" => "sun",
        "colour" => "green",
        "size" => "medium",
    }
    [18] => array(3){
        "delivery" => "sun",
        "colour" => "green",
        "size" => "large",
    }
}

我对输出格式没有太过困扰。

这适用于http://writecodeonline.com/php/

$option_array[] = array(
    "name" => "delivery",
    "options" => array(
        "sat", "sun")
);
$option_array[] = array(
    "name" => "colour",
    "options" => array(
        "red", "blue", "green")
);
$option_array[] = array(
    "name" => "size",
    "options" => array(
        "small", "medium", "large")
);

$N = 1;
foreach ($option_array as $options) $N *= count($options['options']);

$all_combinations = array();

for( $i = 0 ; $i < $N ; ++$i )
{
  $all_combinations[$i] = array();
  $q = $i;
  for( $j = count($option_array)-1 ; 0 <= $j ; --$j )
  {
    $opt = $option_array[$j];
    $nopts = count($opt['options']);
    $all_combinations[$i][$opt['name']] = $opt['options'][$q % $nopts];
    $q = floor($q / $nopts);
  }
}

print_r( $all_combinations );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM