2015-10-17 4 views
0

У меня есть массив с этой структурой:Перебор многомерного массива

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))) 

) 

Как я мог перебирать массив для вывода всех возможных перестановок, т.е.

Еще одна проблема я не знаю, сколько может быть массивов критериев, поэтому, к сожалению, я не могу использовать только 3 вложенных цикла для этого.

Я использую PHP, хотя я думаю, что решение псевдокода будет хорошим, и я смогу его адаптировать.

ответ

0

решаемые его

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>"; 
     }   
    } 
} 
0

Использование вложенных в контурах должно решить вашу проблему:

for($i=0;$i<Array.length;$i++){ 
    for($j=0;$j<Array[$i].length;$j++){ 
     //Echo'ing resultant array element. 
     echo $Array[$i][$j]; 
    } 
} 
+0

Если бы жизнь была так просто. Это было бы только вывести что-то вроде Вареного/Белого Вареного/Brown вареных/Белого и т.д. и т.п. Спасибо в любом случае, мне удалось работать его с аккуратной рекурсивной функцией. – BigMeat

Смежные вопросы