Jump to content
santamariense

Resolução de problema com array

Recommended Posts

Dada uma matriz (exemplo: UFaTlDc.png ), reorganize as linhas de modo que a partir do trecho 1, seu primeiro elemento seja igual ao último do trecho anterior. Resultado final para a matriz dada como exemplo: XuQl6bP.png.

Já fiz de tudo quanto é jeito mas não consigo criar um programa em php para isso que funcione. Alguém consegue resolver?

Share this post


Link to post
Share on other sites

Poste seu código feito até o momento, e o erro que ocorre.
A galera irá te ajudar a sanar a dúvida, mas acho que ninguém irá fazer o trabalho para você....

Share this post


Link to post
Share on other sites

Pois vamos lá... Eu tinha pensado em não influenciar ninguém em uma determinada direção, mas enfim...

Este array...

Array (
[0] => Array ( [0] => 0 [1] => 0 [2] => 3797121530 )
[1] => Array ( [0] => 0 [1] => 1 [2] => 3721261637 )
[2] => Array ( [0] => 0 [1] => 2 [2] => 3797063106 )
[3] => Array ( [0] => 1 [1] => 0 [2] => 3797121528 )
[4] => Array ( [0] => 1 [1] => 1 [2] => 3797121529 )
[5] => Array ( [0] => 1 [1] => 2 [2] => 3797121530 )
[6] => Array ( [0] => 2 [1] => 0 [2] => 3797121528 )
[7] => Array ( [0] => 2 [1] => 1 [2] => 3797063106 )
)
por meio deste código...
for ($aa=0;$aa<count($lNdT);$aa++) {
    if ($aa==0){
        $lista_refNd[0]=$lNdT[0][2];
    } elseif ($lNdT[$aa][1]>$lNdT[$aa-1][1]) {
        $lista_refNd[$aa]=$lNdT[$aa][2];
    } elseif ($lNdT[$aa][2] == $lNdT[$aa - 1][2]) {
        $lista_refNd[$aa] = $lNdT[$aa][2];
    } else { //Em caso de estar desordenado:
        //pega o último valor obtido para procurá-lo na lista
        for ($ee=0;$ee<count($lNdT);$ee++) {
            if ($lista_refNd[$aa-1]==$lNdT[$ee][2] #Se encontrou a ID
                && $lNdT[$aa-1][1] != $lNdT[$ee][1]){ #E ela não for do mesmo trecho
                $trecho = $lNdT[$ee][0];
                $tamTrecho = $lNdT[$ee][1];
                //echo "<br>Tamanho do trecho = ".$tamTrecho."<br>";
                //Reordena o trecho citado como em desordem
                $lProv = array(array()); # Lista provisória
                for($ii=0;$ii<count($lNdT);$ii++){
                    if ($lNdT[$ii][0] == $trecho) {#Ao encontrar o trecho desordenado
                        for ($oo=$ii;$oo==$ii+$tamTrecho;$oo++) { #Reordena
                            for ($uu=$ii+$tamTrecho;$uu==$ii;$uu--){
                                $lProv[0] = $lNdT[$oo];
                                $lNdT[$oo] = $lNdT[$uu];
                                $lNdT[$uu] = $lProv[0];
                            }
                        }
                        //Adiciona a lista final na ordem
                        $uu = $aa;
                        for ($oo=0;$oo==$tamTrecho;$oo++){
                            $lista_refNd[$uu++] = $lNdT[$oo][2];
                        }
                        break;
                    }
                }
            }
        }
    }
}
Isto dá como resultado...
Array (
[0] => 3797121530
[1] => 3721261637
[2] => 3797063106
[3] => 3797063105
[4] => 3797121529
[5] => 3797121530
[6] => 3797121530
[7] => 3797063106
)
Quando queria que estivesse resultando em..
Array (
[0] => 3797121530
[1] => 3721261637
[2] => 3797063106
[3] => 3797063106
[4] => 3797121528
[5] => 3797121528
[6] => 3797121529
[7] => 3797063130
)

Eu acho que enquanto estou pensando, minha cabeça entra em loop infinito e funde. :D Tenho pouca experiência em php. E o que é pior... para começar, não estou entendendo por que que do array 3 ao 5 está-se modificando o próprio valor....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.