Необходимо привести Код (Text): $a[0]=array('0'); $a[1]=array('0','1'); $a[2]=array('0','1','2'); К виду: Код (Text): $out[0]=array('0','0','0'); $out[1]=array('0','0','1'); $out[2]=array('0','0','2'); $out[3]=array('0','1','0'); $out[4]=array('0','1','1'); $out[5]=array('0','1','2'); Размер массивов $a с ключами всегда разный.
а вот так лучше бы было? Код (PHP): $a = array('0' => array('0'), '1' => array('0','1'), '2' => array('0','1','2'));
Принцип обхода такой: https://www.dropbox.com/s/lnw3c1a2o7mai2e/array.png Код для наглядности, он может быть таким: $a[0]=array('a','b','c'); $a[1]=array('d'); $a[2]=array('e','f'); $a[3]=array('x'); Тогда необходимый вид такой: $out[0]=array('a','d','e','x') $out[0]=array('a','d','f','x') $out[1]=array('b','d','e','x') $out[1]=array('b','d','f','x') $out[2]=array('c','d','e','x') $out[2]=array('c','d','f','x')
Решил проблему так Код (Text): $a['key1']=array('a','v'); $a['key2']=array('b','c','r'); $a['key3']=array('x'); $a['key4']=array('d','e','f'); var_dump($a); $count=1; foreach($a as $k=>$v){ $keys[]=$k; $_lines[$k]=0; $count*=count($v); } $end=end($keys); for($m=0;$m<$count;$m++){ $temps=array(); $stop=false; foreach($keys as $sub){ $temps[$sub][]=$a[$sub][$_lines[$sub]]; if($sub==$end){ if(count($a[$sub][$_lines[$sub]+1])){ $_lines[$end]++; }else{ $next=$end; while(!$stop){ $key=array_search($next,$keys); $next=$keys[$key-1]; if($next){ if(count($a[$next][$_lines[$next]+1])){ $_lines[$next]++; $stop=true; }else{ $_lines[$keys[$key]]=0; } }else{ $stop=true; } } $_lines[$end]=0; $_lines[$keys[$key]]=0; } } } $temp[]=$temps; } foreach($temp as $t){ var_dump($t); echo '<br />'; } Думаю можно было проще