Ir para conteúdo

POWERED BY:

Arquivado

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

Mr. Charset

Como ordenar um array pelos elementos (números decimais)?

Recommended Posts

Em ordem crescente. Esse é o array:

 

$produto['frios']['salame'] = 4.50;

$produto['frios']['presunto'] = 3.50;

$produto['confeitaria']['bolo'] = 20;

$produto['padaria']['paofrances'] = 0.30;

$produto['padaria']['brioche'] = 0.40;

Compartilhar este post


Link para o post
Compartilhar em outros sites

já pesquisou por 'php ordenar array'? tu vai achar as funções de ordenação de array

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando natsort ficou assim:

 

Array
(
    [padaria] => Array
        (
            [paofrances] => 0.3
            [brioche] => 0.4
        )

    [confeitaria] => Array
        (
            [bolo] => 20
        )

    [frios] => Array
        (
            [salame] => 4.5
            [presunto] => 3.5
        )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

donde vem esses dados? se for de um banco de dados seria mais fácil ordenar na consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

de qualquer forma um jeito de fazer isso é desmembrando a array pra dar o asorte nas subarrays e então adiciona elas já assorteadas em uma nova array tipo assim

$novaArray = [];

foreach($produtos as $key => $value){
    asort($value);
    $novaArray[$key] = $value;
}

echo '<pre>';
print_r($novaArray);
echo '</pre>';

 

vê aí se é isso mesmo que precisa. se quiser ordenar pelos tipos de produtos também é só dar o asort em $produto antes do foreach()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando natsort ficou assim:

 

Array
(
    [padaria] => Array
        (
            [paofrances] => 0.3
            [brioche] => 0.4
        )  

    [frios] => Array
        (
            [presunto] => 3.5
            [salame] => 4.5           
        )

     [confeitaria] => Array 
         ( 
            [bolo] => 20 
         )

)

 

Quero q fique assim. E ele não está vinculado a um BD. 

Em ordem  crescente de valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então já resolveu então? tu disse que ficou desse jeito aí e quer que fique desse jeito. ficou meio estranho :tounge_wink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não! É que eu copiei o array do comentário anterior para alterar a ordem pro jeito q eu queria. Mas sem querer copiei o "Usando asort ficou assim". Desculpa.

*natsort

Esse meu último comentário é como eu preciso q fique, não como ficou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta krsort($produto); antes do foreach()

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah bom porque montei a sua array do mesmo jeito que tu postou aí e o resultado foi o que tu disse que queria na penultima mensagem tipo assim

 

código

$produto = array("frios" => array("salame" => 4.50, "presunto" => 3.50), "confeitaria" => array("bolo" => 20), "padaria" => array("paofrances" => 0.30, "brioche" => 0.40));

krsort($produto);

$novaArray = [];

foreach($produto as $key => $value){
    asort($value);
    $novaArray[$key] = $value;
}

echo '<pre>';
print_r($novaArray);
echo '</pre>';

resultado

Array
(
    [padaria] => Array
        (
            [paofrances] => 0,3
            [brioche] => 0,4
        )

    [frios] => Array
        (
            [presunto] => 3,5
            [salame] => 4,5
        )

    [confeitaria] => Array
        (
            [bolo] => 20
        )

)

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.