[英]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.