Ir para conteúdo

Arquivado

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

Bruno Ferreira da Silva

Ordenação de Arrays Multivaloradas

Recommended Posts

Preciso ordenar essa array por pontos, vitórias e saldo, só estou conseguindo ordenar apenas por pontos usando essa função callBak

function cmp($a, $b) {
	return $a['pontos'] < $b['pontos'];
}
usort($tabela, 'cmp'); 

Essa é a array que preciso ordenar.

Array
(
    [81] => Array
        (
            [equipe] => Equipe 1
            [jogos] => 2
            [pontos] => 6
            [vitorias] => 2
            [empates] => 0
            [derrotas] => 0
            [gols_pro] => 4
            [gols_contra] => 1
            [saldo] => 3
        )

    [14] => Array
        (
            [equipe] => Equipe 2
            [jogos] => 1
            [pontos] => 0
            [vitorias] => 0
            [empates] => 0
            [derrotas] => 1
            [gols_pro] => 1
            [gols_contra] => 3
            [saldo] => -2
        )
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai precisar utilizar a função usort().

 

Ela ordena arrays usando uma função criada por você para definir o que é maior ou menor.

Você irá criar uma função de comparação que receberá dois valores e dirá qual é o maior. Aí você implementa a lógica que você precisa pra ordenar o array.

 

Porém você deve cuidar, porque essa função reordena as chaves, então ali no seu exemplo 81 e 41 não existirão mais, pois o array será reordenado.

 

Você encontrará alguns exemplos no manual do PHP: http://php.net/usort

 

Não vou te dar a solução pronta porque é melhor que você tente fazer sozinho pra aprender.

Se não conseguir, posta aí até onde conseguiu que a gente te ajuda a continuar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai precisar utilizar a função usort().

 

Ela ordena arrays usando uma função criada por você para definir o que é maior ou menor.

Você irá criar uma função de comparação que receberá dois valores e dirá qual é o maior. Aí você implementa a lógica que você precisa pra ordenar o array.

 

Porém você deve cuidar, porque essa função reordena as chaves, então ali no seu exemplo 81 e 41 não existirão mais, pois o array será reordenado.

 

Você encontrará alguns exemplos no manual do PHP: http://php.net/usort

 

Não vou te dar a solução pronta porque é melhor que você tente fazer sozinho pra aprender.

Se não conseguir, posta aí até onde conseguiu que a gente te ajuda a continuar.

 

 

Shoow, então irei que remontar uma pequena parte da função que monta essa array, blz, jjaja retorno aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você viu que o retorno tem que ser -1 e 1, certo? Quando os dois são iguais, irá retornar zero. Se o da esquerda for maior, retorna 1. Se o da direita for maior, retorna -1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você viu que o retorno tem que ser -1 e 1, certo? Quando os dois são iguais, irá retornar zero. Se o da esquerda for maior, retorna 1. Se o da direita for maior, retorna -1.

 

 

Obrigado pela ajuda Rafa, consegui fazer utilizando essa lógica abaixo:

function cmp($a, $b) {
	if($a['pontos'] < $b['pontos']){								return 1;							}else	
if($a['pontos'] == $b['pontos'] && $a['vitorias'] < $b['vitorias']){													return 1;
}else if($a['pontos'] == $b['pontos'] && $a['vitorias'] == $b['vitorias'] && $a['saldo'] < $b['saldo']){									return 1;
}else{
	return 0;
}
	}

Sabe me dizer se dá pra melhorar ?

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.