doujia1939 2014-03-29 20:24
浏览 20
已采纳

获取php中许多数组的所有可能迭代

I have few arrays for example:

array(
    'color' => array('red', 'blue', ...);
    'size' => array('small', 'big', ...);
    'temp' => array('hot', 'cold', ...);
     ...
)

Is there a function so I can get all possible iterations of these arrays ? (and more arrays and values if needed). For example result should be:

array(
    0 => array('color'=> 'red', 'size'=>'small', 'temp'=>'hot')
    1 =>  array('color'=> 'red', 'size'=>'small', 'temp'=>'cold')
    2 =>  array('color'=> 'red', 'size'=>'big', 'temp'=>'hot')
    3 =>  array('color'=> 'red', 'size'=>'big', 'temp'=>'cold')
)

... and so on.

  • 写回答

1条回答 默认 最新

  • dpevsxjn809817 2014-03-29 21:33
    关注

    Use a recursive approach:

    function generateCombinations($array, $start = 0) {
        $size = count($array);
        if ($size == $start) {
            return array('');
        }
        $result = array();
        foreach ($array[$start] as $val) {
            foreach (generateCombinations($array, $start + 1, $size) as $last) {
                $result[] = $val . ' ' . $last;
            }
        }
        return $result;
    }
    

    Usage:

    $array = array(
        array('red', 'blue'), 
        array('small', 'big'),
        array('hot', 'cold')
    );
    
    $result = generateCombinations($array);
    print_r($result);
    

    Output:

    Array
    (
        [0] => red small hot 
        [1] => red small cold 
        [2] => red big hot 
        [3] => red big cold 
        [4] => blue small hot 
        [5] => blue small cold 
        [6] => blue big hot 
        [7] => blue big cold 
    )
    

    Online Demo

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog