dpspn60064 2015-10-17 22:55
浏览 40
已采纳

迭代通过多维数组

I have an array with this structure:

Array ( 
[0] => Array ( [key] => Egg Method [values] => Array ( 
    [0] => Array ( [id] => 1 [value] => Boiled ) 
    [1] => Array ( [id] => 2 [value] => Poached ) 
    [2] => Array ( [id] => 3 [value] => Fried ) 
    [3] => Array ( [id] => 4 [value] => Scrambled ) ) ) 

[1] => Array ( [key] => Bread [values] => Array ( 
    [0] => Array ( [id] => 5 [value] => White ) 
    [1] => Array ( [id] => 6 [value] => Brown ) ) ) 

[2] => Array ( [key] => Egg Hardness [values] => Array ( 
    [0] => Array ( [id] => 7 [value] => Soft ) 
    [1] => Array ( [id] => 7 [value] => Medium )    
    [2] => Array ( [id] => 8 [value] => Hard ) ) ) 

)

How could I iterate through the array to output all of the possible permutations, i.e.

Egg Method: Boiled / Bread: White / Egg Hardness: Soft
Egg Method: Boiled / Bread: White / Egg Hardness: Medium
Egg Method: Boiled / Bread: White / Egg Hardness: Hard
Egg Method: Boiled / Bread: Brown / Egg Hardness: Soft
Egg Method: Boiled / Bread: Brown / Egg Hardness: Medium
Egg Method: Boiled / Bread: Brown / Egg Hardness: Hard
Egg Method: Poached / Bread: White / Egg Hardness: Soft
Egg Method: Poached / Bread: White / Egg Hardness: Medium
Egg Method: Poached / Bread: White / Egg Hardness: Hard
Egg Method: Poached / Bread: Brown / Egg Hardness: Soft
Egg Method: Poached / Bread: Brown / Egg Hardness: Medium
Egg Method: Poached / Bread: Brown / Egg Hardness: Hard
etc etc

One additional problem is I don't know how many criteria arrays there might be, so unfortunately I can't just use 3 nested loops for this.

I am using PHP, although I guess a pseudo code solution will be fine and I can adapt it.

  • 写回答

2条回答 默认 最新

  • dongrang2140 2015-10-19 10:31
    关注

    Solved it

    recurse("", $partoptions, 0);
    
    function recurse($longstring, $partoptions, $index) {
        $key = $partoptions[$index]['key'];
        $values = $partoptions[$index]['values'];   
        for ($i=0; $i<sizeof($values); $i++) {                  
            $thisvalue = $values[$i]['value'];  
            if (sizeof($partoptions)>$index+1) {
                $tmplongstring = $longstring . ($longstring==""?"":" / ") . $thisvalue;
                recurse($tmplongstring, $partoptions, $index+1);
            } else {
                echo $longstring . " / " . $thisvalue . "<br>";
            }           
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,