dpspn60064 2015-10-17 22:55

# 迭代通过多维数组

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>";
}
}
}
``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 数学建模——参会安排怎么做
• ¥15 电脑键盘实现触摸功能
• ¥25 matlab无法将表达式转换为双数组怎么解决?
• ¥15 单片机汇编语言相关程序
• ¥20 家用射频美容仪技术规格
• ¥15 大家帮我看看为什么错了
• ¥15 unity互动琴弦抖动效果
• ¥15 做了个的二极管反向饱和电流测量电路，但是测试达不到效果
• ¥15 nginx无证书访问https失败
• ¥15 树莓派启动AP热点传入数据