fajohann 0 Denunciar post Postado Outubro 22, 2014 Olá, estou trabalhando em um algoritmo aonde tenho 4 arrays já definidos sendo que um é o pai e cada elemento dos outros arrays será um filho de cada elemento do pai como no exemplo abaixo: function getAllCombinationsArray(){ $return = array(); $father = array( 1=>'cat1', 2=>'cat2', 3=>'cat3' ); $child_1 = array( 1=>'sub_cat1', 2=>'sub_cat2', 3=>'sub_cat3' ); $child_2 = array( 1=>'sub_sub_cat1', 2=>'sub_sub_cat2', 3=>'sub_sub_cat3' ); //$child_n = array(...); foreach($father as $fk => $fv){ foreach($child_1 as $ck => $cv){ $cid = $fk.'_'.$ck; $cname = $fv.' -> '.$cv; foreach($child_2 as $ck2 => $cv2){ $id = $cid.'_'.$ck2; $name = $cname.' -> '.$cv2; $return[$id] = $name; /*foreach($child_n as $nk => $nv){ //Outros filhos */ } } } return $return; } print_r(getAllCombinationsArray()); A saída desta função é a seguinte: Array ( [1_1_1] => cat1 -> sub_cat1 -> sub_sub_cat1 [1_1_2] => cat1 -> sub_cat1 -> sub_sub_cat2 [1_1_3] => cat1 -> sub_cat1 -> sub_sub_cat3 [1_2_1] => cat1 -> sub_cat2 -> sub_sub_cat1 [1_2_2] => cat1 -> sub_cat2 -> sub_sub_cat2 [1_2_3] => cat1 -> sub_cat2 -> sub_sub_cat3 [1_3_1] => cat1 -> sub_cat3 -> sub_sub_cat1 [1_3_2] => cat1 -> sub_cat3 -> sub_sub_cat2 [1_3_3] => cat1 -> sub_cat3 -> sub_sub_cat3 [2_1_1] => cat2 -> sub_cat1 -> sub_sub_cat1 [2_1_2] => cat2 -> sub_cat1 -> sub_sub_cat2 [2_1_3] => cat2 -> sub_cat1 -> sub_sub_cat3 [2_2_1] => cat2 -> sub_cat2 -> sub_sub_cat1 [2_2_2] => cat2 -> sub_cat2 -> sub_sub_cat2 [2_2_3] => cat2 -> sub_cat2 -> sub_sub_cat3 [2_3_1] => cat2 -> sub_cat3 -> sub_sub_cat1 [2_3_2] => cat2 -> sub_cat3 -> sub_sub_cat2 [2_3_3] => cat2 -> sub_cat3 -> sub_sub_cat3 [3_1_1] => cat3 -> sub_cat1 -> sub_sub_cat1 [3_1_2] => cat3 -> sub_cat1 -> sub_sub_cat2 [3_1_3] => cat3 -> sub_cat1 -> sub_sub_cat3 [3_2_1] => cat3 -> sub_cat2 -> sub_sub_cat1 [3_2_2] => cat3 -> sub_cat2 -> sub_sub_cat2 [3_2_3] => cat3 -> sub_cat2 -> sub_sub_cat3 [3_3_1] => cat3 -> sub_cat3 -> sub_sub_cat1 [3_3_2] => cat3 -> sub_cat3 -> sub_sub_cat2 [3_3_3] => cat3 -> sub_cat3 -> sub_sub_cat3 ) A questão é que este algoritmo é muito ineficiente, uma vez que fiz um teste utilizando os seguintes valores para os arrays: count($root) = 3 count($child_1) = 1 count($child_2) = 36 count($child_3) = 21 count($child_4) = 2 Total de combinações = 3*1*36*21*2 = 4536 Demorou mais de 5 minutos para gerar o array com as combinações. Preciso de uma solução mais eficiente. Se alguém puder me dar uma luz, agradeço pois já estou a algum tempo quebrando a cabeça. Compartilhar este post Link para o post Compartilhar em outros sites
Jaspion_ti 0 Denunciar post Postado Outubro 23, 2014 Cara, Também estou meio sem tempo para analisar seu código mas o que posso dizer é que quando você quiser trabalhar com Arrays , use a SPL(Standard PHP Library ) do PHP . Você faz miséria com essas classes. Exemplo de algumas: ArrayIterator FilterIterator LimitIterator ArrayObject Tem outras classes que trabalham com array mas essas são as que mais uso. Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Outubro 23, 2014 Meu jovem, por que não montas um array associativo ?Onde o próprio array vai conter a hierarquia? array( 'cat1'=> array( 'subcat11','subcat12','sub13'=> array('outro cat') ) ) Compartilhar este post Link para o post Compartilhar em outros sites
dochipis 6 Denunciar post Postado Outubro 23, 2014 Você quer fazer um menu com categorias multi níveis? Se for isso, tutorial aqui. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Outubro 23, 2014 :seta: Como gerar todas as combinações possíveis Compartilhar este post Link para o post Compartilhar em outros sites