Jump to content


Photo

Definir Ordem De Arrays Multi-Dimensionais


  • Faça o login para participar
4 replies to this topic

#1 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 17/02/2010, 16:52

Preciso deixar a ordenação livre de forma que o usuário possa determinar se quer listar os índices por preço (maior/menor) ou nome (crescente/descrescente), a dúvida está aqui, dá pra fazer isso numa estrutura de arrays como esta? Estou tentando usar o asort mas pelo que vi não vai rolar não. Alguma sugestão?
<?php
$arrFontes = array( 
                   array( 'nome' => 'produto8', 'preco' => '5.90' ), 
                   array( 'nome' => 'produto3', 'preco' => '1.70' ), 
                   array( 'nome' => 'produto7', 'preco' => '3.55' ), 
                   array( 'nome' => 'produto4', 'preco' => '1.90' ), 
                   array( 'nome' => 'produto5', 'preco' => '2.50' ), 
                   array( 'nome' => 'produto6', 'preco' => '13.70' ), 
                   array( 'nome' => 'produto2', 'preco' => '6.55' ), 
                   array( 'nome' => 'produto1', 'preco' => '1.50' ), 
);

asort( $arrFontes );
?>

Falopa!

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 17/02/2010, 16:59

Pra ordenar é fácil, tu usa a função usort():

<?php

$key = 'nome';

// PHP 5.3+

usort($array, function ($prev, $next) {
    global $key;
    return strcmp($prev[$key], $next[$key]);
});

// PHP 5.0+
usort($array, create_function('$prev, $next', '    global $key;
    return strcmp($prev[$key], $next[$key]);');
Embaralhar já é mais complicado, eu acho... :P

[]’sAté mais

#3 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 17/02/2010, 20:51

@ PAULO FREITAS
Pô cara gambiarrializei uma coisa aqui que já estava com 30 linhas, nem passei perto do que tu propôs...

Falopa!

@ PAULO FREITAS
Realmente ordena perfeitamente quando o assunto é string mas quando tem que ordenar os números a coisa não fica muito boa, ele está entendendo como fracionários, ficando diferente do esperado :(

Array
(
    [0] => Array
        (
            [nome] => produto1
            [preco] => 1.50
        )
 
    [1] => Array
        (
            [nome] => produto3
            [preco] => 1.70
        )
 
    [2] => Array
        (
            [nome] => produto4
            [preco] => 1.90
        )
 
    [3] => Array
        (
            [nome] => produto6
            [preco] => 13.70
        )
 
    [4] => Array
        (
            [nome] => produto5
            [preco] => 2.50
        )
 
    [5] => Array
        (
            [nome] => produto7
            [preco] => 3.55
        )
 
    [6] => Array
        (
            [nome] => produto8
            [preco] => 5.90
        )
 
    [7] => Array
        (
            [nome] => produto2
            [preco] => 6.55
        )
 
)
Vou continuar tentando no manual...

Falopa!

@ PAULO FREITAS
Fazendo um floodzinho básico...

Achei a solução, pesquisando as irmãs da funcão strcmp achei a prima da esquerda :D strnatcasecmp, funciona que é uma beleza.

Falopa!

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 18/02/2010, 09:18

Putz, foi falha minha... Esqueci que preço ali é eram números de ponto flutuante e que deixariam de ser strings. :huh:

Mas tá vendo, tu não encontrou uma solução qualquer, tu encontrou A solução. Ler o manual faz bem, né? :)

[]’sAté mais

#5 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 18/02/2010, 09:42

@ PAULO FREITAS
Ler o manual é melhor do que se pensa. economiza dinheiro e dor de cabeça :D

Falopa!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq