Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
)
)>
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
reorganizei os índices da array e fiz isso aqui na função callback, e ainda não deu certo ...
function cmp($a, $b) {
return $a['pontos'] < $b['pontos'] || $a['vitorias'] < $b['vitorias'] && $a['saldo'] < $b['saldo'];
}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.
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 ?
Acho que é isso aí mesmo. Não teria muito o que melhorar.
Bom trabalho!
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.