Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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?

Compartilhar este post


Link para o post
Compartilhar em outros 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ê....

Compartilhar este post


Link para o post
Compartilhar em outros 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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.