Ir para o conteúdo
alves077

[Dúvida] Sort

Mensagens Recomendadas

alves077

Boa noite,

Tenho um array que contem string compostas por número e letras, sabendo que começam sempre por um número seguido das letras, e algumas string nem letras têm. Gostava de ordenar crescentemente o array, isto é possivel ocm alguma função em php?

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Na "pior das hipoteses" tens sempre a opcao da funcao usort().

Mas explica la melhor a ordenacao crescente, com um exemplo.Ordena as seguintes strings:

99 123 12aaa 1 1111111111111


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

99 123 12aaa 1 1111111111111

ficava supostamente:

1 1111111 123 12 99

Se tiver número repetidos não é preciso comparar o segundo digito e por ai diante, só quero que siga o 1º digito, a ordem dos 1º's digitos iguais é indiferente.

por exemplo:

9A 1b 2c 8d

ficava

1b 2c 8d 9A

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Adaptacao do primeiro exemplo da pagina sobre usort()

<?php
function cmp($a, $b) {
   if ($a{0} == $b{0}) {
       return 0;
   }
   return ($a{0} < $b{0}) ? -1 : 1;
}

$a = array('9A', '1b', '2c', '8d', '2r');
usort($a, 'cmp');

foreach ($a as $key => $value) {
   echo $key, ': ', $value, "\n";
}
?>

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Hm ok,

É possivel fazer tipo qualquer do género: ate encontrar uma caracter contar como um número todo, isto 123 é o número cento e vinte três? Isto é no caso base que deste

1 12aaa 99 123 1111111111111

Basicamente neste caso, queria que ele ordena-se como se o caractér não lá estivesse.

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

A conversao automatica de strings para numeros pode-te ajudar

<?php
function cmp($a, $b) {
   if ((1 * $a) == (1 * $b)) {            # converte para numero
       return 0;
   }
   return ((1 * $a) < (1 * $b)) ? -1 : 1; # converte para numero
}

$a = array('99', '123', '12aaa', '1', '1111111111111');
usort($a, 'cmp');

foreach ($a as $key => $value) {
   echo $key, ': ', $value, "\n";
}
?>

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

para simplificação de código é possível fazer algo deste género:

<?php
$a = array('99', '123', '12aaa', '1', '1111111111111');
usort($a, function ($a, $b) {
   return (int)$a - (int)$b;
});

foreach ($a as $key => $value) {
   echo $key, ': ', $value, "\n";
}
?>

a função de callback só especifica que deverá retornar um valor inferior a 0, 0 ou superior a 0 nos casos de $a ter um valor de ordem inferior, igual ou superior a $b, respectivamente

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Obrigado pela ajuda,

Já agora, dá para com a mesma lógica ordenar um array bidimensional onde ordeno por uma determinada coluna?

Por exemplo ter uma matriz com 2 colunas e n linhas e quero ordenar pela coluna 1, nao perdendo os dados todos.

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.