Ir para conteúdo

Arquivado

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

Rafael Ferreira_163968

organizar com order by letras e numeros

Recommended Posts

Boa tarde, se alguem puder me passar uma informação, agradeço muito.

 

veja a linha abaixo:

$readGaleria = read('fotos',"WHERE post_id = '$postid' ORDER by img_nome ASC");

beleza, na tabela a coluna img_nome recebe centenas de fotos tipo assim:

 

foto01.jpg

foto02.jpg

...

foto1000.jpg

...

 

ai eu mando ordernar como acima ele faz isso

 

foto01.jpg - foto02.jpg - foto03.jpg - foto04.jpg - foto05.jpg - foto06.jpg - foto07.jpg

foto08.jpg - foto09.jpg - foto10.jpg - foto100.jpg - foto1000.jpg - foto101.jpg - foto102.jpg ....

 

 

como ordernar corretamente? para que ele siga a contagem até chegar a mil ou mais sem problemas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use :seta: usort

 

Array:

array (size=8)
  0 => string 'foto01.jpg' (length=10)
  1 => string 'foto02.jpg' (length=10)
  2 => string 'foto03.jpg' (length=10)
  3 => string 'foto10.jpg' (length=10)
  4 => string 'foto100.jpg' (length=11)
  5 => string 'foto1000.jpg' (length=12)
  6 => string 'foto101.jpg' (length=11)
  7 => string 'foto11.jpg' (length=10)

Script de ordenação

usort( 

    $pictures,

    function( $x, $y )
    {   
        $result = preg_replace( '/[^\d]/', null, array( $x, $y ) );
        
        if( $result[ 0 ] == $result[ 1 ] )
        {
            return 0;
        }
        
        return ( $result[ 0 ] < $result[ 1 ] ) ? -1 : 1;
    }
);

Resultado:

array (size=8)
  0 => string 'foto01.jpg' (length=10)
  1 => string 'foto02.jpg' (length=10)
  2 => string 'foto03.jpg' (length=10)
  3 => string 'foto10.jpg' (length=10)
  4 => string 'foto11.jpg' (length=10)
  5 => string 'foto100.jpg' (length=11)
  6 => string 'foto101.jpg' (length=11)
  7 => string 'foto1000.jpg' (length=12)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Use :seta: usort

 

Array:

array (size=8)
  0 => string 'foto01.jpg' (length=10)
  1 => string 'foto02.jpg' (length=10)
  2 => string 'foto03.jpg' (length=10)
  3 => string 'foto10.jpg' (length=10)
  4 => string 'foto100.jpg' (length=11)
  5 => string 'foto1000.jpg' (length=12)
  6 => string 'foto101.jpg' (length=11)
  7 => string 'foto11.jpg' (length=10)

Script de ordenação

usort( 

    $pictures,

    function( $x, $y )
    {   
        $result = preg_replace( '/[^\d]/', null, array( $x, $y ) );
        
        if( $result[ 0 ] == $result[ 1 ] )
        {
            return 0;
        }
        
        return ( $result[ 0 ] < $result[ 1 ] ) ? -1 : 1;
    }
);

Resultado:

array (size=8)
  0 => string 'foto01.jpg' (length=10)
  1 => string 'foto02.jpg' (length=10)
  2 => string 'foto03.jpg' (length=10)
  3 => string 'foto10.jpg' (length=10)
  4 => string 'foto11.jpg' (length=10)
  5 => string 'foto100.jpg' (length=11)
  6 => string 'foto101.jpg' (length=11)
  7 => string 'foto1000.jpg' (length=12)

 

 

obrigado Carlos, mas creio que nao vai da muito certo, deixa eu tentar expor mais o problema

 

sao varios fotografos que acessam o sistema

 

um posta la:

 

fotografulano_foto01.jpg ... fotografulano_foto2500.jpg e assim por diante

 

ai vem outro e coloca só 01.jpg 02.jpg, ... 1000.jpg e assim por diante, ou seja, nao tem um tamanho exato, nem um padrao de nomes, mas todos eles tem uma numeracao no final, entao eu queria que a ordem pegasse so esses numeros. é possivel?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você testou?

 

O script vai ordenar pela numeração e não pelos nomes, por isso a expressão regular, para remover tudo que não seja numérico e fazer a comparação/ordenação.

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.