Jump to content
alves077

[Dúvida] Sort

Recommended Posts

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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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";
}
?>

Edited by 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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";
}
?>

Edited by 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!

Share this post


Link to post
Share on other 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

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
HappyHippyHippo

se for esse o caso, o argumento $a e $b serão os arrays, basta comparar os elementos que pretendes


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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.