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 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line