Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
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?
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.
para quem precisar, resolvi o problema da seguinte forma:
$readGaleria= read('fotos',"WHERE post_id = '$postid' ORDER by LENGTH(img_nome), img_nome ASC");
valeu galera, brigado pela ajuda
Use :seta: usort
Array:
array (size=8)
Script de ordenação
usort(
$pictures,
Resultado:
array (size=8)